private List<T> newList;
public List<T> NewList
{
get{return newList;}
set{newList = value;}
}
Run Code Online (Sandbox Code Playgroud)
我想创建这样的东西,但这是行不通的.它只是一个展示我的目标的例子,因为它很常见的创建字符串和int甚至T的属性但是我从未见过List属性它是否甚至可以做这样的事情,为类型List创建一个属性?
编辑
我有一个普通的类具有正常的属性(字符串属性,int属性等),但我有这个属性存储用户选项,所以在表示层我必须将它们转换为字符串,所以我可以将它们存储在物体.现在有可能有一个List类型的属性以更好和更干净的方式存储多值,而不是将信息转换为一个字符串然后拆分它再次加入它!再次感谢= D
EDIT2
private List<KeyValuePair<string, string>> _settings;
public List<KeyValuePair<string, string>> MySettings
{
get { return _settings; }
set { _settings = value; }
}
Run Code Online (Sandbox Code Playgroud)
我使用了你发布的确切代码,但属性仍然不会出现在对象的实例中,所以我尝试在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; }
}
}
Run Code Online (Sandbox Code Playgroud)
用户类
public class Users
{
private int userId;
private string pass;
private List<Options> userOptions = new List<Options>();
public int ID
{
get { return userId; }
set { user = userId; }
}
public string Pass
{
get { return pass; }
set { pass = value; }
}
public List<Options> OptionsList
{
get { return userOptions; }
set { userOptions = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
表示层
Users newUser = new Users ();
Options userOption = new Options ();
userOption.ID = int.Parse(txtBxID.Text);
userOption.Option = txtBxOption.Text;
Item.Options.Add(userOption);
Run Code Online (Sandbox Code Playgroud)
Mar*_*ius 33
T必须在您工作的范围内定义.因此,如果您的类是通用的,那么您发布的内容将起作用T:
public class MyClass<T>
{
private List<T> newList;
public List<T> NewList
{
get{return newList;}
set{newList = value;}
}
}
Run Code Online (Sandbox Code Playgroud)
否则,您必须使用已定义的类型.
编辑: Per @ lKashef的请求,以下是如何拥有List属性:
private List<int> newList;
public List<int> NewList
{
get{return newList;}
set{newList = value;}
}
Run Code Online (Sandbox Code Playgroud)
这可以在非泛型类中进行.
编辑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; }
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以引用可以引用的命名属性,而不是列表中的任意索引.例如,您可以参考MySettings.FirstName而不是MySettingsList[0].
如果您有任何其他问题,请与我们联系.
编辑3: 对于评论中的问题,您的财产将是这样的:
public class MyClass
{
public List<KeyValuePair<string, string>> MySettings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
编辑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<KeyValuePair<string, string> MySettings { get; set; }
}
public class MyConsumingClass
{
public void MyMethod
{
MyClass myClass = new MyClass();
myClass.MySettings = new List<KeyValuePair<string, string>>();
myClass.MySettings.Add(new KeyValuePair<string, string>("SomeKeyValue", "SomeValue"));
// etc.
}
}
Run Code Online (Sandbox Code Playgroud)
你提到"该属性仍然不会出现在对象的实例中",我不确定你的意思.此属性是否未出现在IntelliSense中?你确定你已经创建了一个实例MyClass(myClass.MySettings如上所述),或者你是否试图像静态属性一样访问它(比如MyClass.MySettings)?
| 归档时间: |
|
| 查看次数: |
120145 次 |
| 最近记录: |