c# - 如何为 List<T> 创建属性

标签 c#

private List<T> newList;

public List<T> NewList
{
get{return newList;}
set{newList = value;}
}

我想创建这样的东西,但这行不通。这只是一个演示我的目标的例子,因为为 string 和 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; }
}

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

我希望您能提供实现此属性的确切代码以及从此类对象的实例分配或检索此类对象实例的简单代码 这是第一次听说这个 KeyValuePair,所有教程都非常简单,不适合我的情况,抱歉!

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

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

The Options Class

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; }
        }
}

The Users Class

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; }
        }
}

The Presentation Layer

    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<T>
{
    private List<T> newList;

    public List<T> NewList
    {
        get{return newList;}
        set{newList = value;}
    }
}

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

编辑:根据@lKashef 的要求,以下是拥有 List 属性的方法:

private List<int> newList;

public List<int> NewList
{
    get{return newList;}
    set{newList = value;}
}

这可以放在非泛型类中。

编辑 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: 对于评论中的问题,您的属性(property)将是这样的:

public class MyClass
{
    public List<KeyValuePair<string, string>> 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<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.
    }
}

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

关于c# - 如何为 List<T> 创建属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462921/

相关文章:

.net 2.0 附带的c# 版本号?

c# - 从父窗体中删除用户控件

c# - 在 Visual Studio 中配置触发智能感知完成的键

c# - 如何在C#中实现Ctrl+C等关键中断的异常代码

c# - 为什么我的 cmdlet 导入、导出然后再次导入?

c# - IIS 6 404 默认文档

c# - 特定于文化的 DateTime 字符串在平台之间不一致

c# - 模型状态错误 : The value 'null' is not valid for nullable field

c# - 我在这里找平均水平吗

c# - 在 C# 中查找列表列表中第 N 个元素的最大值