C# 尝试将结构作为对象传递给迭代字段和值的方法时遇到问题

C# 尝试将结构作为对象传递给迭代字段和值的方法时遇到问题,c#,C#,在感激地借用了其他各种帖子之后,我很好地做到了: public string ShowCandle01(ref TYPE_Candle01 Candle) { string S = ""; foreach (var field in typeof(TYPE_Candle01).GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags

在感激地借用了其他各种帖子之后,我很好地做到了:

public string ShowCandle01(ref TYPE_Candle01 Candle)
{
    string S = "";
    foreach (var field in typeof(TYPE_Candle01).GetFields(BindingFlags.Instance |
                BindingFlags.NonPublic |
                BindingFlags.Public))
    {
        S = S + field.Name + ": " + field.GetValue(Candle).ToString() + "\n";
    }
    return S;
}
但我真正想要的是一个方法,它将迭代任何结构的实例,而不明确知道其名称,如:

公共字符串ShowAnyStruct(引用对象)


我似乎做不到。提前感谢您的先进智慧

我认为您需要的是一种通用方法:

public string ShowAnyStruct<TStruct>(TStruct val) where TStruct: struct
{
    string s = "";
    foreach (var field in typeof(TStruct).GetFields(BindingFlags.Instance |
                                                     BindingFlags.NonPublic |
                                                     BindingFlags.Public))
    {
        s += field.Name + ": " + field.GetValue(Candle).ToString() + "\n";
    }
    return s;
}
公共字符串ShowAnyStruct(TStruct val),其中TStruct:struct
{
字符串s=“”;
foreach(typeof中的var字段(TStruct).GetFields(BindingFlags.Instance|
BindingFlags.NonPublic|
(公众)
{
s+=field.Name+“:“+field.GetValue(Candle.ToString()+”\n”;
}
返回s;
}

当然,没有任何理由将其限制为结构,因此,如果删除该约束,也可以将其用于引用类型。

我认为您需要的是一个通用方法:

public string ShowAnyStruct<TStruct>(TStruct val) where TStruct: struct
{
    string s = "";
    foreach (var field in typeof(TStruct).GetFields(BindingFlags.Instance |
                                                     BindingFlags.NonPublic |
                                                     BindingFlags.Public))
    {
        s += field.Name + ": " + field.GetValue(Candle).ToString() + "\n";
    }
    return s;
}
公共字符串ShowAnyStruct(TStruct val),其中TStruct:struct
{
字符串s=“”;
foreach(typeof中的var字段(TStruct).GetFields(BindingFlags.Instance|
BindingFlags.NonPublic|
(公众)
{
s+=field.Name+“:“+field.GetValue(Candle.ToString()+”\n”;
}
返回s;
}
当然,没有任何理由将此限制为结构,因此如果删除此约束,也可以将其用于引用类型。

您可以尝试

whatever.GetType().GetFields ....

你可以试试

whatever.GetType().GetFields ....


为什么在这里使用
ref
?另外,当你说struct时,你是指实际的
struct
还是任何对象?为什么在这里使用
ref
?另外,当你说struct时,你是指一个实际的
struct
还是任何对象?使用
object
也会将
struct
框起来,这在性能方面不是很好。。。(我没有投反对票)@Fabjan为什么这很重要?@AsadSaeeduddin为什么没有必要使用box
struct
to
object
?@Fabjan我怀疑如果使用反射,拳击是否会带来任何真正的性能差异。@Fabjan很好,一个优点可能是相同的函数适用于所有
结构
s,而不需要为不同的参数类型实例化不同的泛型函数。使用
对象
也将框
结构
,这在性能方面不是很好。。。(我没有投反对票)@Fabjan为什么这很重要?@AsadSaeeduddin为什么没有必要使用box
struct
to
object
?@Fabjan我怀疑如果使用反射,拳击是否会带来任何真正的性能差异。@Fabjan很好,一个优点是相同的函数适用于所有
class
es和
struct
s,而不需要为不同的参数类型实例化不同的泛型函数。