gpt4 book ai didi

c# - 匿名类型列表或对象列表

转载 作者:行者123 更新时间:2023-11-30 18:57:11 26 4
gpt4 key购买 nike

我有以下问题(已简化)。

我有一个狗的 list :

public List<Dog> dogs { get; set; }

我目前通过在 View 中将其转换为 json 对象来访问此列表:

@(new HtmlString(@Json.Encode(@ViewBag.dogs)))

然后我使用 javascript 遍历此 json 对象并将其显示在页面上。

我想将汽车添加到此列表中。

但是,由于该列表是强类型的 dogs 列表,所以我的第一个想法是将列表创建为 dogscars 的共同点是,它们都是对象

当我试图将我的狗列表更改为对象列表时,我收到以下错误

Cannot implicitly convert type 'System.Collections.Generic.List<object>' to System.Collections.Generic.List<dog>

我研究了一下,发现 this这个问题对我没有多大帮助,只是告诉我我无法获得狗和汽车的 list 。然而,就我的目的而言,这是不合适的。我需要我的列表同时包含狗和汽车,以便我可以在我的应用程序中访问它们。

我预计有人建议的一个解决方案是我有两个单独的列表,并发出两个单独的 ajax 请求。但是,我需要按特定顺序(基本上基于它们的创建时间)混合汽车和狗,因此该解决方案并不理想。

简而言之,我想知道实现此目标的最佳方法是什么。也许我完全走错了方向,所以我不反对做一些完全不同的事情,如果它有意义的话。

感谢您一如既往的帮助!

编辑:我已经尝试过转换并且有效。但是,我需要访问狗的属性(我们称之为“毛皮”),但我似乎无法做到这一点(我需要再次转换吗?)

'object' does not contain a definition for 'fur'

最佳答案

只有当狗和车实现相同的接口(interface)或扩展相同的类(例如对象,然后您可以在条件下使用 typeof 对它们执行某些操作)时,您才能创建包含狗和汽车的列表。

编辑:

简单的例子

using System;
using System.Collections.Generic;

namespace Polymorphism
{
class Program
{
public class Car
{
public string Drive()
{
return "Wrrrr!";
}
}

public class Dog
{
public string Talk()
{
return "Woof";
}
}

static void Main()
{
var car = new Car();
var dog = new Dog();

List<object> list = new List<object>();
list.Add(car);
list.Add(dog);

foreach (object o in list)
{
if (o is Car)
Console.WriteLine((o as Car).Drive());
else
Console.WriteLine((o as Dog).Talk());
}
}
}
}

对于该代码,我很抱歉,但我是从 Wikipedia 复制的并使用 Ideone 编辑

关于c# - 匿名类型列表或对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11676294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com