1

如何编写通过我的项目并查找具有特殊属性并能够收集 2 条信息的类的反射代码:ClassName.PropertyName 和传递给属性内 ResourceManager.GetValue 的字符串。我的代码如下。请帮忙。谢谢

    [TestMethod]
    public void TestMethod1()
    {

        Dictionary<string, string> mydictionary = new Dictionary<string, string>();
        mydictionary = ParseAllClassesWithAttribute("MyAttribute");

        Assert.AreEqual(mydictionary["MyClass.FirstNameIsRequired"].ToString(), "First Name is Required");


    }

    private Dictionary<string, string> ParseAllClassesWithAttribute(string p)
    {
        Dictionary<string,string> dictionary = new Dictionary<string, string>();

        // use reflection to go through the class that is decorated by attribute MyAttribute
        // and is able to extract ClassName.PropertyName along with what is Inside
        // GetValue method parameter.
        // In the following I am artificially populating the dictionary object.

        dictionary.Add("MyClass.FirstNameIsRequired", "First Name is Required");
        return dictionary;
    }



     [MyAttribute]
     public class MyClass
        {
            public string FirstNameIsRequired
            {
                get
                {
                    return ResourceManager.GetValue("First Name is required");
                }
            }
        }

        public static class ResourceManager
        {
            public static string GetValue(string key)
            {
                return String.Format("some value from the database based on key {0}",key);
            }
        }
4

1 回答 1

1

反射无法提取"First Name is Required"值,除非您获取 IL 字节并解析它们。这是一个潜在的解决方案:

[AttributeUsage(AttributeTargets.Property)]
public class MyAttribute : Attribute
{
    public string TheString { get; private set; }
    public MyAttribute(string theString)
    {
        this.TheString = theString;
    }
}

const string FirstNameIsRequiredThing = "First Name is required";
[MyAttribute(FirstNameIsRequiredThing)]
public string FirstNameIsRequired
{
    get
    {
        return ResourceManager.GetValue(FirstNameIsRequiredThing);
    }
}

现在您可以读取所有属性MyAttribute并查看预期值。(如果您对这部分有疑问,请务必遵循对您问题的评论的建议)

于 2012-07-04T00:06:44.163 回答