C#中的泛型问题,有没有象Java中的 List用法?

妖怪啊 2016-08-23 02:04:21
如题

void Test()
{
IList<String> strlist = new List<String>();
strlist.Add("123");
strlist.Add("456");

/// 下面两条语句,如何才能转换
IList<Object> objlist = strlist;
IList list = strlist;
}
...全文
337 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
妖怪啊 2016-08-24
  • 打赏
  • 举报
回复
问题解决,结贴了
妖怪啊 2016-08-24
  • 打赏
  • 举报
回复
引用 13 楼 wanghui0380 的回复:
有关逆变和协变的介绍 http://www.cnblogs.com/LoveJenny/archive/2012/03/13/2392747.html
非常感谢,这正是我需要的,非常感谢!
wanghui0380 2016-08-23
  • 打赏
  • 举报
回复
所以,如果从协变角度,你的代码可以写成
  IList <string> x = new List<string>();
          x.Add("b");
          x.Add("a");

         IList<object> y = ((IEnumerable<object>)x).ToList();
wanghui0380 2016-08-23
  • 打赏
  • 举报
回复
有关逆变和协变的介绍 http://www.cnblogs.com/LoveJenny/archive/2012/03/13/2392747.html
wanghui0380 2016-08-23
  • 打赏
  • 举报
回复
有的,net后期版本有逆变和协变概念,不过不是LIst里面而是 IEnumerable<T>里面是协变的 List <string> x = new List<string>(); x.Add("b"); x.Add("a"); IEnumerable<object> y = x; 这样是可以直接协变的
妖怪啊 2016-08-23
  • 打赏
  • 举报
回复
引用 10 楼 qq_20324803 的回复:
[quote=引用 7 楼 goodmouce 的回复:] [quote=引用 3 楼 assky124 的回复:] 可以用顶级父类Object,或者父类 var list = new List<String<>(); object obj = list; IList list1 = list; IEnumerable list2 = list;
我知道 List<T> 可以转成 IList<T>,或者IList 现在有个IList<T>,T派生自 V,那个IList<T>,可以转成IList<V>,或者IList<Object>吗,[/quote] select映射肯定是可以得。
static void Main(string[] args)
        {
            List<b> list = new List<b>();
            List<a> listofa = list.Select(item => (a)item).ToList();
            Console.ReadKey();
        }
        class a { }
        class b : a { }
[/quote] 你的这个方法和我自己写的方法类似,就是创建了一个list的副本。 我也差了一些资料,说IList<String>和IList<Object>没有关系了,虽然String是从Object派生的。
摇撼大地 2016-08-23
  • 打赏
  • 举报
回复
引用 7 楼 goodmouce 的回复:
[quote=引用 3 楼 assky124 的回复:] 可以用顶级父类Object,或者父类 var list = new List<String<>(); object obj = list; IList list1 = list; IEnumerable list2 = list;
我知道 List<T> 可以转成 IList<T>,或者IList 现在有个IList<T>,T派生自 V,那个IList<T>,可以转成IList<V>,或者IList<Object>吗,[/quote] select映射肯定是可以得。
static void Main(string[] args)
        {
            List<b> list = new List<b>();
            List<a> listofa = list.Select(item => (a)item).ToList();
            Console.ReadKey();
        }
        class a { }
        class b : a { }
摇撼大地 2016-08-23
  • 打赏
  • 举报
回复
引用 4 楼 daixf_csdn 的回复:
这样可以
IList<String> strlist = new List<String>();
            strlist.Add("123");
            strlist.Add("456");

            /// 转换
            IList<object> objlist = strlist.OfType<object>().ToList();
这个比我的方法好呢。Oftype更方便一点。
摇撼大地 2016-08-23
  • 打赏
  • 举报
回复
引用 楼主 goodmouce 的回复:
如题

        void Test()
        {
            IList<String> strlist = new List<String>();
            strlist.Add("123");
            strlist.Add("456");

            /// 下面两条语句,如何才能转换
            IList<Object> objlist = strlist;
            IList list = strlist;
        }
这样可以不

IList<Object> objlist = strlist.Select(item=>(object)item).ToList();
我试了试可以用。
妖怪啊 2016-08-23
  • 打赏
  • 举报
回复
引用 3 楼 assky124 的回复:
可以用顶级父类Object,或者父类 var list = new List<String<>(); object obj = list; IList list1 = list; IEnumerable list2 = list;
我知道 List<T> 可以转成 IList<T>,或者IList 现在有个IList<T>,T派生自 V,那个IList<T>,可以转成IList<V>,或者IList<Object>吗,
  • 打赏
  • 举报
回复
Java中的Collection和List都是接口,C#中的命名则要规范得多,一看就明白,相比之下java门坎的确要高些
巴士上的邂逅 2016-08-23
  • 打赏
  • 举报
回复
IList<String> strlist = new List<String>();
strlist.Add("123");
strlist.Add("456");

/// 下面两条语句,如何才能转换
IList<Object> objlist = strlist.Cast<object>().ToList();
IList list = strlist.ToList();
圣殿骑士18 2016-08-23
  • 打赏
  • 举报
回复
这样可以
IList<String> strlist = new List<String>();
            strlist.Add("123");
            strlist.Add("456");

            /// 转换
            IList<object> objlist = strlist.OfType<object>().ToList();
assky124 2016-08-23
  • 打赏
  • 举报
回复
可以用顶级父类Object,或者父类 var list = new List<String<>(); object obj = list; IList list1 = list; IEnumerable list2 = list;
妖怪啊 2016-08-23
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
你说的应该是ArrayList吧
我自己写了一个转换代码,但是我想问有没有直接可以转换的。

    public class IListConvert<T> where T : class
    {
        public static IList Convert(IList<T> list)
        {
            IList l2 = new ArrayList(list.Count);
            foreach (T t in list)
            {
                l2.Add(t);
            }

            return l2;
        }

        public static IList<T> Convert(IList list)
        {
            IList<T> l2 = new List<T>(list.Count);
            foreach (Object o in list)
            {
                T t = o as T;
                if (t != null)
                {
                    l2.Add(t);
                }
            }

            return l2;
        }
    }
  • 打赏
  • 举报
回复
你说的应该是ArrayList吧
内容概要:本文介绍了一个基于Matlab的综合能源系统优化调度仿真资源,重点实现了含光热电站、有机朗肯循环(ORC)和电含光热电站、有机有机朗肯循环、P2G的综合能源优化调度(Matlab代码实现)转气(P2G)技术的冷、热、电多能互补系统的优化调度模型。该模型充分考虑多种能源形式的协同转换与利用,通过Matlab代码构建系统架构、设定约束条件并求解优化目标,旨在提升综合能源系统的运行效率与经济性,同时兼顾灵活性供需不确定性下的储能优化配置问题。文还提到了相关仿真技术支持,如YALMIP工具包的应用,适用于复杂能源系统的建模与求解。; 适合人群:具备一定Matlab编程基础和能源系统背景知识的科研人员、研究生及工程技术人员,尤其适合从事综合能源系统、可再生能源利用、电力系统优化等方向的研究者。; 使用场景及目标:①研究含光热、ORC和P2G的多能系统协调调度机制;②开展考虑不确定性的储能优化配置与经济调度仿真;③学习Matlab在能源系统优化的建模与求解方法,复现高水平论文(如EI期刊)的算法案例。; 阅读建议:建议读者结合文档提供的网盘资源,下载完整代码和案例文件,按照目录顺序逐步学习,重点关注模型构建逻辑、约束设置与求解器调用方式,并通过修改参数进行仿真实验,加深对综合能源系统优化调度的理解。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧