C# 为什么我的静态字典没有初始化?
我正在使用一个大字典,我只想创建一次,以存储一些信息,并使用一个静态函数从中提取信息,如下所示:C# 为什么我的静态字典没有初始化?,c#,C#,我正在使用一个大字典,我只想创建一次,以存储一些信息,并使用一个静态函数从中提取信息,如下所示: public static class AceMimeInfo { static Dictionary<string, Info> mimedictionary = new Dictionary<string, Info> { {".abap", new Info("abap", "ABAP")}, {".asciidoc",
public static class AceMimeInfo
{
static Dictionary<string, Info> mimedictionary = new Dictionary<string, Info>
{
{".abap", new Info("abap", "ABAP")},
{".asciidoc", new Info("asciidoc", "AsciiDoc")},
{".c9search_results", new Info("c9search", "C9Search")},
{".coffee", new Info("coffee", "CoffeeScript")},
{".cf", new Info("coffee", "CoffeeScript")},
{".xul", new Info("xml", "XML")},
{".xbl", new Info("xml", "XML")},
{".xq", new Info("xquery", "XQuery")},
{".yaml", new Info("yaml", "YAML")}
};
public class Info
{
public string Mode;
public string Name;
public Info(string mode, string name)
{
Mode = mode;
Name = name;
}
}
public static string GetMode(string fileext)
{
string fe;
fe = fileext.ToLower();
if(!fe.StartsWith("."))
fe = "." + fe;
if (mimedictionary.ContainsKey(fe))
return mimedictionary[fe].Mode;
return "";
}
}
提前谢谢
更新:
我尝试了上面的代码,它确实有效。上面的词典是我实际使用的词典的一个较短版本(因为它相当长)
这是我正在使用的实际类,但它不起作用。当我缩短字典时,它确实起作用了
public static class AceMimeInfo
{
static Dictionary<string, Info> mimedictionary = new Dictionary<string, Info>
{
{".abap", new Info("abap", "ABAP")},
{".asciidoc", new Info("asciidoc", "AsciiDoc")},
{".c9search_results", new Info("c9search", "C9Search")},
{".coffee", new Info("coffee", "CoffeeScript")},
{".cf", new Info("coffee", "CoffeeScript")},
{".cfm", new Info("coldfusion", "ColdFusion")},
{".cs", new Info("csharp", "C#")},
{".css", new Info("css", "CSS")},
{".dart", new Info("dart", "Dart")},
{".diff", new Info("diff", "Diff")},
{".patch", new Info("diff", "Diff")},
{".dot", new Info("dot", "Dot")},
{".glsl", new Info("glsl", "Glsl")},
{".frag", new Info("glsl", "Glsl")},
{".vert", new Info("glsl", "Glsl")},
{".go", new Info("golang", "Go")},
{".groovy", new Info("groovy", "Groovy")},
{".hx", new Info("haxe", "Haxe")},
{".haml", new Info("haml", "HAML")},
{".htm", new Info("html", "HTML")},
{".html", new Info("html", "HTML")},
{".xhtml", new Info("html", "HTML")},
{".c", new Info("c_cpp", "C/C++")},
{".cc", new Info("c_cpp", "C/C++")},
{".cpp", new Info("c_cpp", "C/C++")},
{".cxx", new Info("c_cpp", "C/C++")},
{".h", new Info("c_cpp", "C/C++")},
{".hh", new Info("c_cpp", "C/C++")},
{".hpp", new Info("c_cpp", "C/C++")},
{".clj", new Info("clojure", "Clojure")},
{".jade", new Info("jade", "Jade")},
{".java", new Info("java", "Java")},
{".jsp", new Info("jsp", "JSP")},
{".js", new Info("javascript", "JavaScript")},
{".json", new Info("json", "JSON")},
{".jsx", new Info("jsx", "JSX")},
{".latex", new Info("latex", "LaTeX")},
{".tex", new Info("latex", "LaTeX")},
{".ltx", new Info("latex", "LaTeX")},
{".bib", new Info("latex", "LaTeX")},
{".less", new Info("less", "LESS")},
{".lisp", new Info("lisp", "Lisp")},
{".scm", new Info("lisp", "Lisp")},
{".rkt", new Info("lisp", "Lisp")},
{".liquid", new Info("liquid", "Liquid")},
{".lua", new Info("lua", "Lua")},
{".lp", new Info("luapage", "LuaPage")},
{".lucene", new Info("lucene", "Lucene")},
{".make", new Info("makefile", "Makefile")},
{".md", new Info("markdown", "Markdown")},
{".markdown", new Info("markdown", "Markdown")},
{".m", new Info("objectivec", "Objective-C")},
{".ml", new Info("ocaml", "OCaml")},
{".mli", new Info("ocaml", "OCaml")},
{".pl", new Info("perl", "Perl")},
{".pm", new Info("perl", "Perl")},
{".pgsql", new Info("pgsql", "pgSQL")},
{".php", new Info("php", "PHP")},
{".phtml", new Info("php", "PHP")},
{".ps1", new Info("powershell", "Powershell")},
{".py", new Info("python", "Python")},
{".r", new Info("r", "R")},
{".Rd", new Info("rdoc", "RDoc")},
{".Rhtml", new Info("rhtml", "RHTML")},
{".ru", new Info("ruby", "Ruby")},
{".gemspec", new Info("ruby", "Ruby")},
{".rake", new Info("ruby", "Ruby")},
{".rb", new Info("ruby", "Ruby")},
{".scad", new Info("scad", "OpenSCAD")},
{".scala", new Info("scala", "Scala")},
{".scss", new Info("scss", "SCSS")},
{".sass", new Info("scss", "SCSS")},
{".sh", new Info("sh", "SH")},
{".bash", new Info("sh", "SH")},
{".bat", new Info("sh", "SH")},
{".sql", new Info("sql", "SQL")},
{".styl", new Info("stylus", "Stylus")},
{".stylus", new Info("stylus", "Stylus")},
{".svg", new Info("svg", "SVG")},
{".tcl", new Info("tcl", "Tcl")},
{".tex", new Info("tex", "Tex")},
{".txt", new Info("text", "Text")},
{".textile", new Info("textile", "Textile")},
{".typescript", new Info("typescript", "Typescript")},
{".ts", new Info("typescript", "Typescript")},
{".str", new Info("typescript", "Typescript")},
{".xml", new Info("xml", "XML")},
{".rdf", new Info("xml", "XML")},
{".rss", new Info("xml", "XML")},
{".wsdl", new Info("xml", "XML")},
{".xslt", new Info("xml", "XML")},
{".atom", new Info("xml", "XML")},
{".mathml", new Info("xml", "XML")},
{".mml", new Info("xml", "XML")},
{".xul", new Info("xml", "XML")},
{".xbl", new Info("xml", "XML")},
{".xq", new Info("xquery", "XQuery")},
{".yaml", new Info("yaml", "YAML")}
};
public class Info
{
public string Mode;
public string Name;
public Info(string mode, string name)
{
Mode = mode;
Name = name;
}
}
public static string GetMode(string fileext)
{
string fe;
fe = fileext.ToLower();
if(!fe.StartsWith("."))
fe = "." + fe;
if (mimedictionary.ContainsKey(fe))
return "ace/mode/" + mimedictionary[fe].Mode;
return "";
}
}
公共静态类AceMimeInfo
{
静态字典mimedictionary=新字典
{
{.abap',新信息(“abap”,“abap”)},
{.ascidoc“,新信息(“ascidoc”,“ascidoc”)},
{.c9search_results',新信息(“c9search”,“c9search”)},
{.coffee“,新信息(“coffee”,“CoffeeScript”)},
{.cf“,新信息(“咖啡”,“咖啡脚本”)},
{.cfm“,新信息(“coldfusion”,“coldfusion”)},
{.cs',新信息(“csharp”,“C#”),
{.css“,新信息(“css”,“css”)},
{.dart',新信息(“dart”,“dart”)},
{.diff“,新信息(“diff”,“diff”)},
{.patch',新信息(“diff”,“diff”)},
{.dot“,新信息(“dot”,“dot”)},
{.glsl',新信息(“glsl”,“glsl”)},
{.frag“,新信息(“glsl”,“glsl”)},
{.vert“,新信息(“glsl”,“glsl”)},
{.go',新信息(“golang”,“go”)},
{.groovy“,新信息(“groovy”,“groovy”)},
{.hx“,新信息(“haxe”,“haxe”)},
{.haml',新信息(“haml”,“haml”)},
{.htm“,新信息(“html”,“html”)},
{.html“,新信息(“html”,“html”)},
{.xhtml',新信息(“html”,“html”)},
{.c',新信息(“c_cpp”,“c/c++”),
{.cc“,新信息(“c_cpp”,“c/c++”),
{.cpp“,新信息(“c_cpp”,“c/c++”),
{.cxx“,新信息(“c_cpp”,“c/c++”),
{.h',新信息(“c_cpp”,“c/c++”),
{.hh“,新信息(“c_cpp”,“c/c++”),
{.hpp“,新信息(“c_cpp”,“c/c++”),
{.clj',新信息(“clojure”,“clojure”)},
{.jade“,新信息(“jade”,“jade”)},
{.java“,新信息(“java”,“java”)},
{.jsp“,新信息(“jsp”,“jsp”)},
{.js“,新信息(“javascript”,“javascript”)},
{.json“,新信息(“json”,“json”)},
{.jsx“,新信息(“jsx”,“jsx”)},
{.latex“,新信息(“latex”,“latex”)},
{.tex“,新信息(“乳胶”,“乳胶”)},
{.ltx“,新信息(“乳胶”,“乳胶”)},
{.bib“,新信息(“乳胶”,“乳胶”)},
{.less',新信息(“less”,“less”)},
{.lisp“,新信息(“lisp”,“lisp”)},
{.scm“,新信息(“lisp”,“lisp”)},
{.rkt“,新信息(“lisp”,“lisp”)},
{.liquid“,新信息(“liquid”,“liquid”)},
{.lua“,新信息(“lua”,“lua”)},
{.lp“,新信息(“luapage”,“luapage”)},
{.lucene“,新信息(“lucene”,“lucene”)},
{.make“,新信息(“makefile”,“makefile”)},
{.md',新信息(“降价”,“降价”)},
{.markdown“,新信息(“markdown”,“markdown”)},
{.m',新信息(“objectivec”,“Objective-C”)},
{.ml“,新信息(“ocaml”,“ocaml”)},
{.mli“,新信息(“ocaml”,“ocaml”)},
{.pl',新信息(“perl”,“perl”)},
{.pm“,新信息(“perl”,“perl”)},
{.pgsql“,新信息(“pgsql”,“pgsql”)},
{.php“,新信息(“php”,“php”)},
{.phtml“,新信息(“php”,“php”)},
{.ps1“,新信息(“powershell”,“powershell”)},
{.py“,新信息(“python”,“python”)},
{.r',新信息(“r”,“r”)},
{.Rd',新信息(“rdoc”,“rdoc”)},
{.Rhtml',新信息(“Rhtml”,“Rhtml”)},
{.ru“,新信息(“ruby”,“ruby”)},
{.gempec“,新信息(“ruby”,“ruby”)},
{.rake“,新信息(“ruby”,“ruby”)},
{.rb“,新信息(“ruby”,“ruby”)},
{.scad“,新信息(“scad”,“OpenSCAD”)},
{.scala“,新信息(“scala”,“scala”)},
{.scss',新信息(“scss”,“scss”)},
{.sass“,新信息(“scss”,“scss”)},
{.sh“,新信息(“sh”,“sh”)},
{.bash“,新信息(“sh”,“sh”)},
{.bat“,新信息(“sh”,“sh”)},
{.sql“,新信息(“sql”,“sql”)},
{.styl“,新信息(“触笔”,“触笔”)},
{.stylus”,新信息(“stylus”,“stylus”)},
{.svg“,新信息(“svg”,“svg”)},
{.tcl',新信息(“tcl”,“tcl”)},
{.tex“,新信息(“tex”,“tex”)},
{.txt“,新信息(“文本”,“文本”)},
{.TELTINE',新信息(“TELTINE”,“TELTINE”)},
{.typescript“,新信息(“typescript”,“typescript”)},
{.ts“,新信息(“类型脚本”,“类型脚本”)},
{.str“,新信息(“类型脚本”,“类型脚本”)},
{.xml”,新信息(“xml”,“xml”)},
{.rdf“,新信息(“xml”,“xml”)},
{.rss“,新信息(“xml”,“xml”)},
{.wsdl',新信息(“xml”,“xml”)},
{.xslt“,新信息(“xml”,“xml”)},
{.atom“,新信息(“xml”,“xml”)},
{.mathml',新信息(“xml”,“xml”)},
{.mml“,新信息(“xml”,“xml”)},
{.xul“,新信息(“xml”,“xml”)},
{.xbl“,新信息(“xml”,“xml”)},
{.xq',新信息(“xquery”,“xquery”)},
{.yaml“,新信息(“yaml”,“yaml”)}
};
公共类信息
{
公共字符串模式;
公共字符串名称;
公共信息(字符串模式、字符串名称)
{
模式=模式;
名称=名称;
}
}
公共静态字符串GetMode(字符串fileext)
{
串铁;
fe=fileext.ToLower();
如果(!fe.StartsWith(“.”)
fe=“.”+fe;
if(mimedictionary.ContainsKey(fe))
返回“ace/mode/”+mimedictionary[fe].mode;
返回“”;
}
}
调试器输出:
{“TestApp.AceMimeInfo”的类型初始值设定项引发了异常。“}
更新II:重复键在哪里?我建议您创建一个静态构造函数,并在那里初始化所有静态类型,如以下示例所示:
public class AcmeMimeInfo
{
private static List<string> list;
static AcmeMimeInfo()
{
list = new List<string>();
}
}
公共cla
public class AcmeMimeInfo
{
private static List<string> list;
static AcmeMimeInfo()
{
list = new List<string>();
}
}
public static string GetMode(string fileOrExt)
{
string ext = System.IO.Path.GetExtension(fileOrExt);
if (ext == String.Empty) {
ext = fileOrExt;
if (!ext.StartsWith(".")) {
ext = "." + ext;
}
}
Info info;
if (mimedictionary.TryGetValue(ext, out info)) {
return info.Mode;
}
return "-";
}