C#如何访问静态类List<>从另一个类 [英] C# How to access static class List<> from another class

查看:428
本文介绍了C#如何访问静态类List<>从另一个类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用C#,我有了一个自定义类型的静态列表一个静态类。这是自定义类型:



<预类=郎-CS prettyprint-覆盖> 公共类LanguageItem
{
公Word.WdLanguageID标识{搞定;组; }
公共字符串名称{;组; }

公共LanguageItem(字符串名称,诠释ID)
{
n =(Word.WdLanguageID)ID;
名称=名称;
}
}

这是使用这种类型的静态类:

 公共静态类LanguageList 
{
公共静态列表< LanguageItem> _languageList;

静态LanguageList()
{
_languageList.Add(新LanguageItem(阿拉伯语,1025));
_languageList.Add(新LanguageItem(保加利亚,1026));
_languageList.Add(新LanguageItem(加泰罗尼亚,1027));
_languageList.Add(新LanguageItem(TraditionalChinese,1028));
_languageList.Add(新LanguageItem(捷,1029));
_languageList.Add(新LanguageItem(丹麦,1030));
_languageList.Add(新LanguageItem(德国,1031));
_languageList.Add(新LanguageItem(希腊,1032));
_languageList.Add(新LanguageItem(EnglishUS,1033));
_languageList.Add(新LanguageItem(西班牙,1034));
_languageList.Add(新LanguageItem(芬兰1035));
_languageList.Add(新LanguageItem(法国,1036));
_languageList.Add(新LanguageItem(希伯来文,1037));
_languageList.Add(新LanguageItem(匈牙利,1038));
_languageList.Add(新LanguageItem(冰岛,1039));
_languageList.Add(新LanguageItem(意大利,1040));
_languageList.Add(新LanguageItem(日本1041));
_languageList.Add(新LanguageItem(韩国,1042));
_languageList.Add(新LanguageItem(荷兰,1043));
}

公共静态列表< LanguageItem> LanguageListItems
{
得到
{
返回_languageList;
}
私定
{
_languageList =价值;
}
}
}



我所试图做的是使用该列表从另一个类,以从列表中返回的项目。我想指定名称,我想要得到的编号回来。



我试图用这样的:

 使用Word =的Microsoft.Office.Interop.Word; 

Word.Application oWord =新Word.Application();

oWord.Selection.LanguageID = LanguageList.Single(LANG => lang.Name == strTgtLanguage).ID;



但我得到一个编译错误,上面写着:




LanguageList'不包含'单'


定义

我想看看其他类似的职位,如如何访问一个通用的静态类的所有特定版本的C#?并的如何访问静态类,这是在另一个静态类和其他的成员,但我想不出它基于这些。



另外我使用的是硬编码枚举的原因,因为如果我使用COM对象 Office.Interop.Word ,然后它永远(超过2分钟),所有的250 +项目添加到列表中。



有人可以帮我点了什么我做错了,为什么我不能访问列表中,或是否有更好的方法?先谢谢了。


解决方案

我觉得你的做法是不恰当的。



如果你硬编码的列表中,那么为什么你有一个二传手? ?此外,该清单应该再是一成不变的,正确的。



我相信,这将更好地为你的需要:

 公共静态类LanguageList 
{
私人静态只读表< LanguageItem> _languageList =新的List< LanguageItem>(新[]
{
新LanguageItem(阿拉伯语,1025),
新LanguageItem(保加利亚,1026),
新LanguageItem (加泰罗尼亚,1027),
新LanguageItem(TraditionalChinese,1028),
新LanguageItem(捷,1029),
新LanguageItem(丹麦,1030),
新LanguageItem(德国,1031),
新LanguageItem(希腊,1032),
新LanguageItem(EnglishUS,1033),
新LanguageItem(西班牙,1034),
新LanguageItem(芬兰,1035),
新LanguageItem(法国,1036),
新LanguageItem(希伯来文,1037),
新LanguageItem(匈牙利,1038),
新LanguageItem(冰岛,1039年),
新LanguageItem(意大利,1040),
新LanguageItem(日本 1041),
新LanguageItem(韩国1042),
新LanguageItem(荷兰1043),
});

公共静态的IEnumerable< LanguageItem> GetLanguages()
{
返回_languageList;
}

公共静态LanguageItem GetLanguageItem(字符串languageName)
{
返回_languageList.SingleOrDefault(LI = GT; li.Name.Equals(languageName));
}
}


Using C#, I have a static class that has a static list of a custom type. Here is the custom type:

public class LanguageItem
{
    public Word.WdLanguageID Id { get; set; }
    public string Name { get; set; }

    public LanguageItem(string name, int id)
    {
        Id = (Word.WdLanguageID)id;
        Name = name;
    }
}

And here is the static class that uses this type:

public static class LanguageList
{            
    public static List<LanguageItem> _languageList;

    static LanguageList()
    {
        _languageList.Add(new LanguageItem("Arabic", 1025));
        _languageList.Add(new LanguageItem("Bulgarian", 1026));
        _languageList.Add(new LanguageItem("Catalan", 1027));
        _languageList.Add(new LanguageItem("TraditionalChinese", 1028));
        _languageList.Add(new LanguageItem("Czech", 1029));
        _languageList.Add(new LanguageItem("Danish", 1030));
        _languageList.Add(new LanguageItem("German", 1031));
        _languageList.Add(new LanguageItem("Greek", 1032));
        _languageList.Add(new LanguageItem("EnglishUS", 1033));
        _languageList.Add(new LanguageItem("Spanish", 1034));
        _languageList.Add(new LanguageItem("Finnish", 1035));
        _languageList.Add(new LanguageItem("French", 1036));
        _languageList.Add(new LanguageItem("Hebrew", 1037));
        _languageList.Add(new LanguageItem("Hungarian", 1038));
        _languageList.Add(new LanguageItem("Icelandic", 1039));
        _languageList.Add(new LanguageItem("Italian", 1040));
        _languageList.Add(new LanguageItem("Japanese", 1041));
        _languageList.Add(new LanguageItem("Korean", 1042));
        _languageList.Add(new LanguageItem("Dutch", 1043));
    }

    public static List<LanguageItem> LanguageListItems
    {
        get
        {
            return _languageList;
        }
        private set
        {
            _languageList = value;
        }
    }
}

What I am trying to do is to use this list from another class, to return the the items from the list. I want to specify the Name and I want to get the Id back.

I tried to use this:

using Word = Microsoft.Office.Interop.Word;

Word.Application oWord = new Word.Application();

oWord.Selection.LanguageID = LanguageList.Single(lang => lang.Name == strTgtLanguage).Id;

But I get a compile error that reads:

'LanguageList' does not contain a definition for 'Single'

I tried to look at other similar post, such as How to access all specific versions of a generic static class in C#? and How to access member of a static class which is inside another static class and others, but I can't figure it out based on these.

Also the reason I am using a hard coded enumeration because if I use the COM object Office.Interop.Word, then it takes forever (over 2 minutes) to add all the 250+ items to the list.

Can somebody help me a point out what I am doing wrong and why can't I access the list, or if there is a better approach? Thanks in advance.

解决方案

I think your approach is not appropriate.

If you're hard-coding the list, then why would you have a setter? Also, the list should then be immutable, correct?

I believe this would work better for your need:

    public static class LanguageList
{
    private static readonly List<LanguageItem> _languageList = new List<LanguageItem>(new[]
    {
        new LanguageItem("Arabic", 1025),
        new LanguageItem("Bulgarian", 1026),
        new LanguageItem("Catalan", 1027),
        new LanguageItem("TraditionalChinese", 1028),
        new LanguageItem("Czech", 1029),
        new LanguageItem("Danish", 1030),
        new LanguageItem("German", 1031),
        new LanguageItem("Greek", 1032),
        new LanguageItem("EnglishUS", 1033),
        new LanguageItem("Spanish", 1034),
        new LanguageItem("Finnish", 1035),
        new LanguageItem("French", 1036),
        new LanguageItem("Hebrew", 1037),
        new LanguageItem("Hungarian", 1038),
        new LanguageItem("Icelandic", 1039),
        new LanguageItem("Italian", 1040),
        new LanguageItem("Japanese", 1041),
        new LanguageItem("Korean", 1042),
        new LanguageItem("Dutch", 1043),
    });

      public static IEnumerable<LanguageItem> GetLanguages ()
    {
        return _languageList;
    }

    public static LanguageItem GetLanguageItem(string languageName)
    {
        return _languageList.SingleOrDefault(li => li.Name.Equals(languageName));
    }
}

这篇关于C#如何访问静态类List&LT;&GT;从另一个类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆