无法修改原有类时,如何访问C#泛型参数的Age属性?
问题:泛型方法无法识别无继承关系类的公共属性
我想创建一个带有泛型参数person的方法,person可以是Man或Woman类,但这两个类没有继承任何基类。Visual Studio提示T中没有Age的定义。
原始代码如下:
public class Man { public string Name { get; set; } = "Man Name"; public int? Age { get; set; } } public class Woman { public string Name { get; set; } = "Woman Name"; public int? Age { get; set; } } public class People { public string Person<T>(T person) { return person.Age; }; }
我搜索后发现一些解决方案,似乎需要创建两个重载方法,但两者逻辑完全相同,有没有办法让Visual Studio知道T拥有Age属性?
补充:我无法修改Man和Woman类,只能编写People类。
可行解决方案
根据@Panagiotis Kanavos的建议,我尝试了以下代码并成功运行,现在可以将两个不同类的属性赋值给同一个变量_age,无需使用泛型即可用同一套逻辑处理,我会在实际项目中尝试此方案,非常感谢。
public class People { public void Person(object person) { int? _age = 0; switch (person.GetType().ToString()) { case "Man": var man = person as Man; _age = man?.Age; break; case "Woman": var woman = person as Woman; _age = woman?.Age; break; } Console.WriteLine(_age); } }
内容的提问来源于stack exchange,提问作者EBDS
相关产品推荐
相关产品推荐

