Questions tagged «c#»

C#(发音为“ See Sharp”)是由Microsoft开发的一种高级,静态类型的多范例编程语言。C#代码通常针对Microsoft的.NET系列工具和运行时,其中包括.NET Framework,.NET Core和Xamarin。使用此标记可解决有关用C#或C#正式规范编写的代码的问题。

3
枚举标志超过2 ^ 32
我在应用程序中使用Enum标志。枚举可以包含大约50个以上的值,因此值最多为2 ^ 50。我只是想知道,我可以Math.Pow(2, variable)用来计算这些吗? 当我尝试这样做时,我得到一个常量值编译时错误。除了手动计算这些2的幂并将其放入之外,还有其他方法吗? 这是我在做什么: [Flags] internal enum RiskStates : long { None = 0, AL = Convert.ToInt64(Math.Pow(2,0)), AK = 2, AZ = 4, AR = 8, CA = 16, CO = 32, CT = 64, DC = 128, DE = 256, FL = 512, GA = 1024, HI …
67 c#  enums  flags 

12
由于.NET具有垃圾回收器,为什么我们需要终结器/析构函数/处置模式?
如果我理解正确,.net运行时将始终在我之后清理。因此,如果我创建新对象并且停止在代码中引用它们,则运行时将清理这些对象并释放它们占用的内存。 既然是这种情况,那么为什么某些对象需要具有析构函数或dispose方法?当不再引用它们时,运行时是否会清理它们?




11
正则表达式以空格分隔,除非用引号引起来
我想使用.Net Regex.Split方法将输入字符串拆分成一个数组。除非用引号引起来,否则它必须在空白处分割。 输入:这是“我的字符串”,有“六个匹配项” 预期产量: 这里 是 我的弦 它 具有 六场比赛 我需要什么模式?我还需要指定任何RegexOptions吗?
67 c#  .net  regex 

2
不注销事件处理程序是否不好?
如果我有一个仅注册了少数事件处理程序的应用程序(并且使用该事件的对象直到应用程序关闭才被处置),我真的需要担心取消注册那些处理程序吗?我能看到的唯一好的原因是,如果触发了您不必关心的事件(即,您为一个事件注册了多个处理程序),则可能会有一些额外的开销。还有其他理由吗?是否有人因为未注销事件而遇到重大问题?

5
ASP.NET Core中基于令牌的身份验证(刷新)
我正在使用ASP.NET Core应用程序。我正在尝试实施基于令牌的身份验证,但无法弄清楚如何使用新的安全系统。 我的情况: 客户端请求令牌。我的服务器应授权用户并返回access_token,客户端将在随后的请求中使用它。 这是有关实现我真正需要的两篇很棒的文章: 使用ASP.NET Web API 2,Owin和身份的基于令牌的身份验证 使用JSON Web令牌 问题是-对我来说,如何在ASP.NET Core中执行相同的操作并不明显。 我的问题是:如何配置ASP.NET Core Web Api应用程序以与基于令牌的身份验证一起使用?我应该朝哪个方向前进?您是否撰写了有关最新版本的文章,或者知道在哪里可以找到这些文章? 谢谢!

7
在哪里可以了解MEF?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 5年前关闭。 改善这个问题 我和Glenn Block一起观看了DNR电视节目,看来MEF对我的公司很有用。我正在尝试查找有关它的优缺点和使用它的一些示例项目的更多信息。是否有使用MEF的优秀博客/教程? 注意:我使用C#,所以如果示例在C#中,那就太好了。
67 c#  .net  mef 

10
为什么IEnumerable <T> .ToList <T>()返回List <T>而不是IList <T>?
扩展方法ToList()返回List&lt;TSource&gt;。按照相同的模式,ToDictionary()返回Dictionary&lt;TKey, TSource&gt;。 我很好奇为什么这些方法没有分别按IList&lt;TSource&gt;和键入其返回值IDictionary&lt;TKey, TSource&gt;。这似乎更奇怪,因为将ToLookup&lt;TSource, TKey&gt;其返回值键入为接口而不是实际的实现。 通过使用dotPeek或其他反编译器查看这些扩展方法的源代码,我们看到以下实现(ToList()由于它更短而显示): public static List&lt;TSource&gt; ToList&lt;TSource&gt;(this IEnumerable&lt;TSource&gt; source) { if (source == null) throw Error.ArgumentNull("source"); return new List&lt;TSource&gt;(source); } 那么,为什么此方法将其返回值键入接口的特定实现而不是接口本身呢?唯一的变化是返回类型。 我很好奇,因为IEnumerable&lt;&gt;扩展名的签名非常一致,除了这两种情况。我一直认为这有点奇怪。 另外,为了使事情更加混乱,状态文档ToLookup(): 根据指定的键选择器函数从IEnumerable创建查找。 但返回类型为ILookup&lt;TKey, TElement&gt;。 在Edulinq中,Jon Skeet提到返回类型是,List&lt;T&gt;而不是IList&lt;T&gt;,但不再涉及主题。 广泛的搜索没有得到任何答案,所以在这里我问你: 不将返回值键入为接口背后有任何设计决定,还是偶然?

7
快速获取特定路径中的所有文件和目录
我正在创建一个备份应用程序,其中c#扫描目录。为了获得目录中的所有文件和子文件,在使用这样的东西之前: DirectoryInfo di = new DirectoryInfo("A:\\"); var directories= di.GetFiles("*", SearchOption.AllDirectories); foreach (FileInfo d in directories) { //Add files to a list so that later they can be compared to see if each file // needs to be copid or not } 唯一的问题是,有时无法访问文件,并且出现一些错误。我得到一个错误的例子是: 结果,我创建了一个递归方法,该方法将扫描当前目录中的所有文件。如果该目录中有目录,则将通过该目录再次调用该方法。关于此方法的好处是,我可以将文件放在try catch块中,如果没有错误,可以选择将这些文件添加到列表中,如果我有错误,则可以将目录添加到另一个列表中。 try { files = di.GetFiles(searchPattern, SearchOption.TopDirectoryOnly); …

6
为什么使用EventArgs.Empty而不是null?
我回想起在多个场合和多个位置读到的关于触发典型事件的信息: protected virtual OnSomethingHappened() { this.SomethingHappened(this, EventArgs.Empty); } 如果没有有趣的事件参数,则e应该为EventArgs.Empty,而不是null。 我遵循了代码中的指导,但是我意识到我不清楚为什么这是首选技术。为什么指定的合同比空值更喜欢EventArgs.Empty?
67 c#  events  eventargs 

11
用户定义的基类转换运算符
介绍 我知道“不允许在用户定义的基础类之间进行转换”。作为对此规则的解释,MSDN给出了“您不需要此运算符”。 我确实知道不需要用户定义的向基类的转换,因为这显然是隐式完成的。但是,我确实需要从基类进行转换。 在我当前的设计中,使用非托管代码的包装程序,我使用存储在Entity类中的指针。所有使用指针的类都从该Entity类派生,例如,Body类。 因此,我有: 方法一 class Entity { IntPtr Pointer; Entity(IntPtr pointer) { this.Pointer = pointer; } } class Body : Entity { Body(IntPtr pointer) : base(pointer) { } explicit operator Body(Entity e) { return new Body(e.Pointer); } } 此演员表是非法的。(请注意,我没有费心编写访问器)。没有它,编译器将允许我执行以下操作: 方法B (Body)myEntity ... 但是,在运行时,我会得到一个例外,说明此强制转换是不可能的。 结论 因此,在这里,我需要从基类进行用户定义的转换,而C#拒绝了它。使用方法A,编译器会抱怨,但是代码将在运行时逻辑上起作用。使用方法B,编译器不会抱怨,但是代码显然会在运行时失败。 在这种情况下,我感到奇怪的是,MSDN告诉我不需要此运算符,并且编译器的行为好像是隐式的(方法B)。我应该做些什么? 我知道我可以使用: 解决方案A …
67 c#  casting 

5
如何调试.NET运行时中的内部错误?
我正在尝试调试一些处理大文件的工作。该代码本身可以工作,但是.NET Runtime本身报告了零星的错误。就上下文而言,此处的处理是一个1.5GB的文件(仅一次加载到内存中),正在处理并循环释放,以尝试重现此否则无法预测的错误。 我的测试片段基本上是: try { byte[] data =File.ReadAllBytes(path); for(int i = 0 ; i &lt; 500 ; i++) { ProcessTheData(data); // deserialize and validate // force collection, for tidiness GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced); GC.WaitForPendingFinalizers(); } } catch(Exception ex) { Console.WriteLine(ex.Message); // some more logging; StackTrace, recursive InnerException, etc } (加上一些时间安排和其他东西) 对于不确定的迭代次数,该循环将完全成功地处理-毫无问题;然后该过程将突然终止。未命中异常处理程序。该测试确实涉及大量内存使用,但是在每次迭代中它的锯齿效果都非常好(没有明显的内存泄漏,而且我还有足够的余量-锯齿最坏的地方有14GB的未使用主内存) 。该过程是64位的。 …
67 c#  .net 

1
AvalonEdit:级联HighlightingColorizers
我想级联AvalonEdit的SyntaxHighlighting引擎。我有2个HighlightingDefinitions。第一个是主要语法。第二个是复杂的多行预处理器标记语言。因此,将第二个语法嵌入第一个语法太复杂了。更简单的方法是呈现第一种语法,然后更改受影响的线部分(基于第二种语法)。 因此,我HighlightingColorizer用第二种语言实例化了一种新语言,并将其添加到LineTransformers。但是第二种语言使整个文档着色,而不仅仅是带有预处理器指令的线段:非预处理器代码是黑色的。 在调试ColorizeLine第二个线路转换器的-method时,未突出显示的代码(=没有预处理程序代码)的行没有按预期着色。但是线条的颜色是黑色的。 那么HighlightingColorizer,在整个文档开始着色之前,是否要重置所有以前突出显示的文档? 还是其他问题?如何正确地级联2 HighlightingColorizers?
67 c#  .net  avalonedit 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.