如何为List 创建属性

private List newList; public List NewList { get{return newList;} set{newList = value;} } 

我想创建这样的东西,但这不起作用。 这只是一个展示我的目标的例子,因为它很常见的创建字符串和int甚至T的属性但是我从未见过List属性它是否甚至可以做这样的事情,为类型List创建属性?

编辑

我有一个普通的类具有正常的属性(字符串属性,int属性等),但我有这个属性存储用户选项,所以在表示层我必须将它们转换为字符串,所以我可以将它们存储在物体。 现在有可能有一个List类型的属性以更好和更干净的方式存储多值,而不是将信息转换为一个字符串然后拆分它再次加入它! 再次感谢= D

EDIT2

 private List<KeyValuePair> _settings; public List<KeyValuePair> MySettings { get { return _settings; } set { _settings = value; } } 

我使用了你发布的确切代码,但属性仍然不会出现在对象的实例中,所以我尝试在get和set中添加代码(我想知道你为什么把它们留空或者意味着什么?)并且还添加了一个私有代码类中的变量,但它仍然没有出现在对象实例的属性中!

我希望你能提供确切的代码来实现这个属性,以及一个简单的代码,用于从这个类对象的实例中分配或检索它。这是第一次听到这个KeyValuePair并且所有的教程都很简单而不是我的好的,对不起!

最后的编辑:经过大量的研究和Mark Avenius的帮助,我找到了完美的答案。 希望每个人都能从中受益。

现在! 如何创建列表的属性:

选项类

 Public Class Options { private string id; private int option; public int ID { get { return id; } set { id= value; } } public string Option { get { return option; } set { option = value; } } } 

用户类

 public class Users { private int userId; private string pass; private List userOptions = new List(); public int ID { get { return userId; } set { user = userId; } } public string Pass { get { return pass; } set { pass = value; } } public List OptionsList { get { return userOptions; } set { userOptions = value; } } } 

表达层

  Users newUser = new Users (); Options userOption = new Options (); userOption.ID = int.Parse(txtBxID.Text); userOption.Option = txtBxOption.Text; Item.Options.Add(userOption); 

必须在您工作的范围内定义T 因此,如果您的类在T上是通用的,那么您发布的内容将起作用:

 public class MyClass { private List newList; public List NewList { get{return newList;} set{newList = value;} } } 

否则,您必须使用已定义的类型。

编辑: Per @ lKashef的请求,以下是如何拥有List属性:

 private List newList; public List NewList { get{return newList;} set{newList = value;} } 

这可以在非generics类中进行。

编辑2:为了回答您的第二个问题(在编辑中),我不建议使用列表进行此类数据处理(如果我理解正确的话)。 我会将用户设置放在他们自己的类(或结构中,如果您愿意)并在您的原始类上具有此类型的属性:

 public class UserSettings { string FirstName { get; set; } string LastName { get; set; } // etc. } public class MyClass { string MyClassProperty1 { get; set; } // etc. UserSettings MySettings { get; set; } } 

这样,您可以引用可以引用的命名属性,而不是列表中的任意索引。 例如,您可以引用MySettings.FirstName而不是MySettingsList[0]

如果您有任何其他问题,请与我们联系。

编辑3:对于评论中的问题,您的财产将是这样的:

 public class MyClass { public List> MySettings { get; set; } } 

编辑4:基于问题的编辑2,以下是我将如何使用它:

 public class MyClass { // note that this type of property declaration is called an "Automatic Property" and // it means the same thing as you had written (the private backing variable is used behind the scenes, but you don't see it) public List MySettings { get; set; } } public class MyConsumingClass { public void MyMethod { MyClass myClass = new MyClass(); myClass.MySettings = new List>(); myClass.MySettings.Add(new KeyValuePair("SomeKeyValue", "SomeValue")); // etc. } } 

你提到“该属性仍然不会出现在对象的实例中”,我不确定你的意思。 此属性是否未出现在IntelliSense中? 您确定已经创建了MyClass的实例(如上面的myClass.MySettings ),或者您是否尝试像静态属性(如MyClass.MySettings )一样访问它?

 public class MyClass { private List list; public List MyList { get { return list; } set { list = value; } } } 

然后你可以做类似的事情

 MyClass instance1 = new MyClass(); List integers = instance1.MyList; MyClass instance2 = new MyClass(); IEnumerable persons = instance2.MyList; 

你可以这样做但是T generic参数需要在包含的类中声明:

 public class Foo { public List NewList { get; set; } } 

可以使用List类型的属性,但是您的类也需要传递给T

 public class ClassName { public List MyProperty { get; set; } } 

简单有效的替代方案:

 public class ClassName { public List MyProperty { get; set; } } 

要么

 public class ClassName { public List MyProperty { get; set; } } 

对于差异,请参阅此post: List vs List

指定T的类型,或者如果要使其成为通用的,则需要使父类具有通用性。

 public class MyClass { etc