【问题标题】:Static List in C#C# 中的静态列表
【发布时间】:2015-02-05 10:23:39
【问题描述】:

我正在尝试做这样的事情:

public static class A
{
    public static readonly List<string> alist = new List<string>()
    {
        //some big data about 70 rows
    };
    public struct astruct
    {
        public const string adata = "a data";
    }
}

public class B
{
    string s1 = A.astruct.adata;     //OK
    string s2 = A.alist.Find("sth")  //No such list! Even Intellisense can't find it after pressing A.
}

您能告诉我如何将列表用作静态列表吗?

提前谢谢...

编辑:问题不是我传入的 Find 方法或参数。问题是我无法从 B 类中访问 List。对不起我的英语

【问题讨论】:

  • 这与列表无关。 adata 在这种情况下根本不是一个有效的标识符,考虑到您在该行中使用了 A.astruct.adata,您应该知道这一点。
  • find 未在 System.Collections.Generic.List 上定义。你的意思是Find?或者,您遇到了什么错误?
  • string s2 = A.alist.find(s1);?
  • 另外,请注意这种方法确实不推荐,因为这不是线程安全的。
  • 它是List.Find 而不是List.find,如果您传递谓词(返回bool 的东西),它会返回一个字符串,adata 是......我不知道是什么是的。

标签: c# list static


【解决方案1】:

请尝试以下代码。 它可能对你有用。

使用谓词从 List 中查找元素。

public static class A
{
    public static readonly List<string> alist = new List<string>
    {
        //some big data about 70 rows
    };

    public struct astruct
    {
        public const string adata = "a data";
    }
}

public class B
{
    string s1 = A.astruct.adata;
    string s2 = A.alist.Find(m => m.Equals(A.astruct.adata));
}

【讨论】:

  • 问题不是我传入的Find方法或参数。问题是我无法从B类中访问List。
  • 请试试上面的代码。它的工作代码。在此您可以从 B 类访问列表及其值
  • 声明不当导致未创建列表,public static readonly List alist = new List**()** { //一些70行左右的大数据 };在您当前的情况下正确声明列表如下, public static readonly List alist = new List { //一些大约 70 行的大数据 };
【解决方案2】:

你应该这样做

public static class A
{
    public static readonly List<string> alist = new List<string>()
    {
        //some big data about 70 rows
    }
    public struct astruct
    {
        public const string adata = "a data";
    }
}

public class B
{
    string s1 = A.astruct.adata;
    string s2 = A.alist.FirstOrDefault(s=>s==A.astruct.adata);
    string s3 = A.alist.FirstOrDefault(s=>s==s1);
}

【讨论】:

  • 第 6 行缺少分号。
  • 在我的原始代码中,我没有。抱歉打错了。我真正的问题是,当我输入 A 时,我会列出来。
【解决方案3】:

您收到无法将string 转换为System.Predicate&lt;string&gt; 的错误。

也就是说,您需要对 Find() 使用以下语法:

string s2 = A.alist.Find(x => x == adata);

.Where().FirstOrDefault().SingleOrDefault()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多