首页 / C# / c# – 访问泛型对象的非泛型成员
c# – 访问泛型对象的非泛型成员
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 访问泛型对象的非泛型成员,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1229字,纯文字阅读大概需要2分钟。
内容图文
![c# – 访问泛型对象的非泛型成员](/upload/InfoBanner/zyjiaocheng/754/e8ca71092b274dc9b66c3617eb911db8.jpg)
有没有办法收集(例如在List中)多个不共享超级类的“通用”对象?如果是这样,我如何访问他们的共同属性?
例如:
class MyObject<T>
{
public T Value { get; set; }
public string Name { get; set; }
public MyObject(string name, T value)
{
Name = name;
Value = value;
}
}
var fst = new MyObject<int>("fst", 42);
var snd = new MyObject<bool>("snd", true);
List<MyObject<?>> list = new List<MyObject<?>>(){fst, snd};
foreach (MyObject<?> o in list)
Console.WriteLine(o.Name);
显然,这是伪代码,这不起作用.
此外,我不需要访问.Value属性(因为这不是类型安全的).
编辑:既然我一直在考虑这个问题,那么可以使用子类.但是,我认为这意味着我必须为每个新类型编写一个新的子类.
@ Grzenio
是的,这完全回答了我的问题.当然,现在我需要复制整个共享接口,但这不是一个大问题.我应该想到这个……
@ aku
你是对的鸭子打字.我不希望可以访问两个完全随机类型的对象.
但我认为通用对象会共享某种通用接口,因为它们完全相同,除了它们被参数化的类型.显然,情况并非如此.
解决方法:
我认为在C#中不可能,因为MyObject不是MyObject的基类.我通常做的是定义一个接口(一个’普通’,而不是通用),并使MyObject实现该接口,例如
interface INamedObject
{
string Name {get;}
}
然后你可以使用界面:
List<INamedObject> list = new List<INamedObject>(){fst, snd};
foreach (INamedObject o in list)
Console.WriteLine(o.Name);
它回答了你的问题吗?
内容总结
以上是互联网集市为您收集整理的c# – 访问泛型对象的非泛型成员全部内容,希望文章能够帮你解决c# – 访问泛型对象的非泛型成员所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。