如何在cs文件中查看命令行的输出

How can I see the output of command line in cs file

我正在 .cs 文件中工作,我需要查看由 c# 程序执行的一些 object/variable 的输出。我每次都会用它来调试。

例如,在下面的代码中,我需要查看变量 DataNaiss 的输出(类型、行数、包含的所有元素...)。

var DataNaiss = engine.Evaluate("DataNaiss=DataIns[which(cond1 & DataIns$Id %in% ID_Final),'Date.naissance']").AsCharacter();

我尝试添加此代码:

Console.WriteLine(DataNaiss.ToString());
Console.ReadLine();

输出结果如下图:

请看最后一行 R.net CharacterVector 。好像说的是DataNaiss的类型,但是它的所有元素在哪里呢?

在其他方面,直到现在我不知道为什么我也在同一个控制台window导入了tableDataAch的数据知道我只是为了显示 DataNaiss 而调用控制台 window 而不是为了其他事情!!您可以在第一个 table DataAch 的相同图片元素中看到。 我的导入数据代码是:

 REngine engine = REngine.GetInstance();

 DataFrame DataAch = engine.Evaluate("DataAch=read.table('C:/Users/isalah/Desktop/Fichiers_CRM/Fichier_csv/Achats1.csv',header=TRUE,sep =';',fill =TRUE)").AsDataFrame();
 DataFrame DataDia = engine.Evaluate("DataDia=read.table('C:/Users/isalah/Desktop/Fichiers_CRM/Fichier_csv/Diagnostic.csv',header=TRUE,sep =';',fill=TRUE)").AsDataFrame();
 DataFrame DataCad = engine.Evaluate("DataCad=read.table('C:/Users/isalah/Desktop/Fichiers_CRM/Fichier_csv/CADEAUX.csv',header=TRUE,sep =';',fill=TRUE)").AsDataFrame();
 DataFrame DataIns = engine.Evaluate("DataIns=read.table('C:/Users/isalah/Desktop/Fichiers_CRM/Fichier_csv/Inscrits.csv',header=TRUE,sep =';',fill =TRUE)").AsDataFrame();

请问如何解释?

通过覆盖 DataNaiss 变量中类型的 ToString 函数,您可以将它们打印到控制台。

关注the MSDN Guide你可以这样做:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override string ToString()
    {
        return "Person: " + Name + " " + Age;
    }
}

然后在对象上调用 ToString() 允许您打印它们。

Just see the end line please R.net CharacterVector . It seems that it talk about the type of DataNaiss But where are all elements of it?

对变量调用 .ToString() 不会神奇地显示您需要的所有数据。

根据Microsoft Documentation你可以看到:

The default implementation of the ToString method returns the fully qualified name of the type of the Object

因此,您可以理解,在您的情况下,名为 DataNaiss 的变量的类型实际上是 CharacterVector.

类型

查看 R.Netthe source code,您可以清楚地看到 class CharacterVector 没有覆盖 ToString 方法。

为了获取变量 DataNaiss 的元素,您必须自己访问它们。我从源代码中看到的唯一方法是像 DataNaiss[0] 一样访问它们,因为在它们的源代码中你有:

public override string this[int index]
{
    get
    {
        if (index < 0 || Length <= index)
        {
            throw new ArgumentOutOfRangeException();
        }
        using (new ProtectedPointer(this))
        {
            return GetValue(index);
        }
    }
    set
    {
        if (index < 0 || Length <= index)
        {
            throw new ArgumentOutOfRangeException();
        }
        using (new ProtectedPointer(this))
        {
            SetValue(index, value);
        }
    }
}

我建议你可以根据它的长度遍历 DataNaiss 对象,并获取你需要的数据,例如,如果你可以访问 Length 属性:

for (int i=0; i<DataNaiss.Length; i++)
{
    Console.WriteLine(DataNaiss[i]);
}

这没有经过测试。我正在根据我在他们的代码中阅读的内容回答所有这些问题。