使用nameof()访问父对象名称

时间:2017-08-24 16:00:56

标签: c#

我有一个带参数的扩展方法。在扩展方法中,我希望能够访问传入的对象的名称。

static MyObject Add<T>(this MyObject myObj, T value) {
    // MyObject is dictionary<string, object> for simple example
    myObj.Add(nameof(value), value);
    return myObj;
}

void run() {
  var anotherObject = new AnotherObject() { Name = "Bob" };
  var myObject = new MyObject().Add(anotherObject.Field);
}

当执行此操作时,它会放置"value", "Bob",而我希望它将"Name", "Bob"放入字典中。

这可能是使用nameof()功能还是我需要重新考虑逻辑?我能想出的唯一保留一般想法的是:

static MyObject Add<T>(this MyObject myObj, string name, T value)...

myObject.Add(nameOf(anotherObject.Field), anotherObject.Field);

我不想重复字段定义。

2 个答案:

答案 0 :(得分:0)

您可以使用typeof()

访问类型名称
static MyObject Add<T>(this MyObject myObj, T value) {
    // MyObject is dictionary<string, object> for simple example
    myObj.Add(typeof(T).Name, value);
    return myObj;
}

答案 1 :(得分:0)

以下示例可以帮助您。

    //MyObject class

    public class MyObject{
     public string Name{get;set;}
    }

//AnotherObject class

    public class AnotherObject{
    public string Name{get;set;}
    }

//Method call

    void Main()
    {
      var anotherObject = new AnotherObject() { Name = "Bob" };
      var object1 = new MyObject();
      var obj = object1.Add<MyObject, AnotherObject>(object1, anotherObject);
     //print obj.Name; anywhere.
    }

//Extension Method

    static class Ext{
    public static MyObject Add<K,T>(this MyObject myObj, MyObject myObjOne, T value) {
        // MyObject is dictionary<string, object> for simple example
        string val = typeof(T).GetProperty("Name").GetValue(value).ToString();
        myObjOne.Name = val;
        return myObjOne;
    }

    }