0

我想转换一种已经完成这项工作的方法

(仅当您在其主体中实例化该类时)

一个将接受受控类作为传递参数的人......不知何故。

我试图通过反复试验自己得到这个结果,(主要是试验..和错误,很多......)

但没有成功(:

这第一类在我的助手类(扩展命名空间)中

public static List<string> AnyClassFieldsValuesAsList<T>(this T Clss, string nestedName)
{
    // i know how to get this to work... if an instace of the class is declared 
    // only here i would like to have any given class...as passed parameter
    // couple of tests to get a hold of the passed Class...no success (:
    var T1 = typeof(T.GetType());
    var T2 = Clss.GetType();

    return typeof(Clss.GetType()).GetFields(); //ToList<string>();
}

这是用于保存表示样式字体的字符串的主题类(我已存储在相同的帮助文件中)

public class FontNames 
{
    public readonly string Aharoni = "Aharoni",
                           Andalus = "Andalus",
                           AngsanaNew = "Angsana New",
                           AngsanaUPC = "AngsanaUPC",
                           Aparajita = "Aparajita";
                           //.....etc'
}

现在在当前项目背后的代码中,我希望能够做类似的事情

//imports of extensions and my style namespaces ....
// then somewhere after Page_Load()...

var instnceOfFnames  = new FontNames();
list<string> FontsLst= instnceOfFnames.AnyClassFieldsValuesAsList(.....);

AnyClassFieldsValuesAsList()顶部签名中的参数仅用于测试,

因为我不能和他们一起工作,我不确定他们是我应该通过的人。

获得结果的正确语法是什么?

4

1 回答 1

2

据我了解,您需要在没有类实例的情况下获取字段的值。我想,您应该将这些字段声明为public readonly static .... 然后,您将能够使用以下方法:

public static IEnumerable<string> GetFields<T>()
{
    Type type = typeof(T);
    return type.GetFields(BindingFlags.Static | BindingFlags.Public)
                .Where(f => f.FieldType == typeof(string))
                .Select(f => (string)f.GetValue(null));
}

像这样:

foreach (string f in GetFields<FontNames>())
     Console.WriteLine(f);

根据评论:

对于当前的问题(据我了解),它似乎是多余的,因为静态字段不需要访问实例。但至少它可以给出一些想法

public static IEnumerable<string> GetFields<T>(this T value)
{
    Type type = value.GetType();
    //...all the same as above
}

为了得到相同的结果,没有泛型就足够了

public static IEnumerable<string> GetFields(this object value)
{
    Type type = value.GetType();
    //...all the same as above
}
于 2012-12-16T01:53:01.190 回答