如何在方法期望一个基本对象列表的情况下传递一个派生对象列表?我正在转换.ToList<BaseClass>()
列表,并想知道是否有更好的方法。 我的第二个问题是语法不正确。 我正在尝试通过引用传递列表,但是我收到了一个错误:'ref'参数未被归类为变量
有什么方法可以解决这两个问题吗?谢谢。
public class BaseClass { }
public class DerivedClass : BaseClass { }
class Program
{
static void Main(string[] args)
{
List<DerivedClass> myDerivedList = new List<DerivedClass>();
PassList(ref myDerivedList.ToList<BaseClass>());
// SYNTAX ERROR ABOVE IS - 'ref' argument is not classified as a variable
Console.WriteLine(myDerivedList.Count);
}
public static void PassList(ref List<BaseClass> myList)
{
myList.Add(new DerivedClass());
Console.WriteLine(myList.Count);
}
}
已解决:
类似于这种方法解决了我的问题。
public static void PassList<T>(ref List<T> myList) where T : BaseClass
{
if (myList == null) myList = new List<T>();
// sorry, i know i left this out of the above example.
var x = Activator.CreateInstance(typeof(T), new object[] {}) as T;
myList.Add(x);
Console.WriteLine(myList.Count);
}
感谢所有帮助解决这个问题以及其他SO问题的人。
ref
? - zerkmsList
是一个引用类型的类。在方法中添加的项目将被添加到同一实例中。 - zerkmsref
是如何工作的(或者可能不理解引用类型是如何工作的)。请跟随我的回答中的链接并仔细阅读它。 - Jon Skeet