Questions tagged «c#»

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

15
“处置”是否仅应用于包含非托管资源的类型?
我最近正在与一位同事讨论Dispose实现的价值和类型IDisposable。 我认为IDisposable,即使没有任何非托管资源需要清理,实现应尽快清理的类型也很有价值。 我的同事有不同的看法。执行IDisposable,如果你没有任何非托管资源为你的类型,最终会被垃圾收集是没有必要的。 我的观点是,如果您希望尽快关闭ADO.NET连接,则可以实施IDisposable并且using new MyThingWithAConnection()有意义。我的同事回答说,在幕后,ADO.NET连接是不受管理的资源。我对他的答复是,所有事情最终都是不受管理的资源。 我知道的建议一次性模式,你免费托管和非托管资源,如果Dispose被调用,但如果通过终结/析构函数称为唯一的免费托管资源(和博客前一阵子关于如何提醒消费者不当使用您的IDisposable类型的) 因此,我的问题是,如果您的类型不包含非托管资源,是否值得实现IDisposable?

4
在.NET / C#中绘制SVG?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 1年前关闭。 改善这个问题 我想使用C#生成SVG文件。我已经有代码以PNG和EMF格式绘制它们(使用框架的标准类System.Drawing.Imaging.Metafile和ZedGraph)。您可以建议做什么以使该代码适应SVG?最好我想找到一些模仿System.Drawing.Graphics接口的库(免费或不收费)。

9
C#6.0字符串插值本地化
C#6.0具有字符串插值-一个很好的功能,用于格式化字符串,例如: var name = "John"; WriteLine($"My name is {name}"); 该示例转换为 var name = "John"; WriteLine(String.Format("My name is {0}", name)); 从本地化的角度来看,最好存储类似以下的字符串: "My name is {name} {middlename} {surname}" 比String.Format表示法: "My name is {0} {1} {2}" 如何使用字符串插值进行.NET本地化?是否有一种将$“ ...”放入资源文件的方法?还是应该像“ ... {name}”那样存储字符串并以某种方式即时插值? PS这个问题不是关于“如何制作string.FormatIt扩展名”(有很多这样的库,SO答案等)。这个问题是关于Roslyn扩展(在“本地化”上下文中用于“字符串插值”)(都是MS .NET词汇中的术语)或动态用法(例如Dylan提出)的问题。
67 c#  .net  c#-6.0 



4
“ LINQ to Entities不支持LINQ表达式节点类型'Invoke'”-烦死了!
稍后在我的EF中,我试图传递一个匿名函数以用作Linq查询的一部分。该函数将传入INT并返回BOOL(u.RelationTypeId为INT)。以下是我的函数的简化版本: public IEnumerable<UserBandRelation> GetBandRelationsByUser(Func<int, bool> relation) { using (var ctx = new OpenGroovesEntities()) { Expression<Func<UsersBand, bool>> predicate = (u) => relation(u.RelationTypeId); var relations = ctx.UsersBands.Where(predicate); // mapping, other stuff, back to business layer return relations.ToList(); } } 但是,我得到上述错误。似乎我通过从函数构建谓词来使所有事情都正确。有任何想法吗?谢谢。

19
如何快速编写代码并运行小型C#代码
有时候,我想从论坛中测试新代码,或者需要帮助我的朋友解决特定的C#问题。问题是我不想每次仅在代码中/仅运行此小代码时在Visual Studio中创建新的“项目”。 Java&Eclipse IDE附带了“剪贴簿”功能,该功能允许执行任意Java表达式。C#程序员有哪些选择?

6
用泛型装箱和拆箱
创建整数集合的.NET 1.0方法(例如)是: ArrayList list = new ArrayList(); list.Add(i); /* boxing */ int j = (int)list[0]; /* unboxing */ 使用此方法的代价是由于装箱和拆箱而导致缺乏类型安全性和性能。 .NET 2.0方法是使用泛型: List<int> list = new List<int>(); list.Add(i); int j = list[0]; 装箱的价格(据我了解)是需要在堆上创建一个对象,将分配给堆栈的整数复制到新对象,反之亦然。 泛型的使用如何克服这个问题?堆栈分配的整数是否保留在堆栈上并从堆中指向(我想不是这样,因为当超出范围时会发生什么)?似乎仍然需要将其复制到堆栈中的其他位置。 到底是怎么回事?
67 c#  .net  generics  boxing  unboxing 



4
是否在单独的程序集中启用上下文迁移?
我有一个要运行的项目,update-database但我的模型和上下文位于单独的项目中。 如果我运行enable-migrations,则会出现此错误:在程序集“ MyProject”中未找到任何上下文类型。 大概是因为我的上下文在MyProject.MVC中。 如果我enable-migrations针对MyProject.MVC运行,则必须添加一个应用程序配置文件。我不想这样做,因为我想在许多项目中使用代码。 所以我可以enable-migrations针对MyProject运行,并以某种方式告诉它在MyProject.MVC中查找上下文吗?


2
如何正确注销事件处理程序
在代码审查中,我偶然发现了这个(简化的)代码片段以注销事件处理程序: Fire -= new MyDelegate(OnFire); 我认为这不会取消注册事件处理程序,因为它会创建一个从未注册过的新委托。但是在搜索MSDN时,我发现了几个使用此惯用语的代码示例。 所以我开始了一个实验: internal class Program { public delegate void MyDelegate(string msg); public static event MyDelegate Fire; private static void Main(string[] args) { Fire += new MyDelegate(OnFire); Fire += new MyDelegate(OnFire); Fire("Hello 1"); Fire -= new MyDelegate(OnFire); Fire("Hello 2"); Fire -= new MyDelegate(OnFire); Fire("Hello 3"); } …
67 c#  .net  events  delegates 

7
Int32.ToString()是特定于文化的吗?
我正在运行ReSharper的Beta版,它为以下代码提供警告: int id; // ... DoSomethingWith(id.ToString()); 该警告正在发生id.ToString(),它告诉我“在字符串转换中明确指定区域性”。我理解警告,并且知道如何解决-只是将代码更改为更加笨拙id.ToString(CultureInfo.InvariantCulture)。 但是我的问题是:那有必要吗?我的意思是,当您使用类似DateTime(不同的区域性具有不同的日期格式)和Double(不同的字符用于小数点)类型时,指定区域性很重要。但是Int32.ToString(),至少在美国和不变文化中,根本没有添加任何格式。没有逗号,没有小数点,没有美元符号,什么都没有。那么根据文化的不同会有什么变化? 当您调用无参数时,是否存在某些文化实际上会添加某种格式Int32.ToString()?还是这是ReSharper Beta中的错误,并且此警告确实不适用Int32(在这种情况下,我将提交ReSharper错误报告)?

4
Visual Studio:调试引用的DLL,我在另一个SLN中有源
我正在尝试调试一个对添加的DLL有引用的项目,该DLL存储在外部目录中,而我刚刚添加了一个引用。现在当然可以调试我的项目了,但是在我的其他dll上调用方法的那行我无法介入,即F12。 我能够执行此操作的一种方法是将项目(dll)作为现有项目添加到解决方案中,并替换引用的dll以使用附加的项目而不是磁盘上的文件。 但是,有什么烂摊子,我确定有更清洁的方法吗? 我似乎记得是否复制了某些PDB文件或其他内容,但我不记得了。我是否需要打开Visual Studio的2个副本,主项目1个,引用的DLL 1个?

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.