Questions tagged «c#»

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


2
Visual Studio 2015-“分析器”参考是什么意思?
在Visual Studio 2015预览版中创建普通的C#控制台应用程序,我们得到一个名为“ Analyzers”的伪引用: 上面的“分析人员”参考是什么意思? 项目文件内部没有任何内容,并且属性窗口对此条目没有任何显示(完全空白)(尽管与“引用属性”相反,它在标题中显示“文件夹属性”,但并没有太多说明)。 我希望这与罗斯林有关,但我不知道。我已经安装了ReSharper,但我不认为它与此有关。 编辑6.8.2016 可接受的答案说明了分析器提供的工具,但未说明为什么开发工具成为(运行时?)参考。实际上,与其他引用不同,它不是运行时引用。因此,这个奇迹的答案是Hans Passants在下面的评论: 他们选择了笨拙的地方来添加代码分析器功能,否则,如果不彻底解决解决方案资源管理器和nuget的问题,他们找不到更好的地方。–汉斯·帕桑(Hans Passant)'2015年5月26日8:59

9
覆盖方法上的C#可选参数
似乎在.NET Framework中,重写该方法时,可选参数存在问题。以下代码的输出是:“ bbb”“ aaa”。但是我期望的输出是:“ bbb”“ bbb”。是否有解决方案?我知道可以通过方法重载来解决,但想知道这样做的原因。该代码在Mono中也可以正常工作。 class Program { class AAA { public virtual void MyMethod(string s = "aaa") { Console.WriteLine(s); } public virtual void MyMethod2() { MyMethod(); } } class BBB : AAA { public override void MyMethod(string s = "bbb") { base.MyMethod(s); } public override void MyMethod2() { …

4
序列化私人成员数据
我正在尝试将对象序列化为具有许多属性的XML,其中一些属性为只读。 public Guid Id { get; private set; } 我已经标记了[Serializable]类,并且实现了ISerializable接口。 下面是我用来序列化对象的代码。 public void SaveMyObject(MyObject obj) { XmlSerializer serializer = new XmlSerializer(typeof(MyObject)); TextWriter tw = new StreamWriter(_location); serializer.Serialize(tw, obj); tw.Close(); } 不幸的是,它落在此消息的第一行。 未处理InvalidOperationException:无法生成临时类(结果= 1)。错误CS0200:无法将属性或索引器'MyObject.Id'分配给它-只读 如果我将Id属性设置为public,则效果很好。有人可以告诉我我是否正在做某事,或者至少可以做某件事?

5
依赖注入和命名记录器
我有兴趣了解有关人们如何使用依赖项注入平台注入日志的更多信息。尽管下面的链接和我的示例引用了log4net和Unity,但我不一定要使用这两个。对于依赖项注入/ IOC,我可能会使用MEF,因为这是其余项目(大型)正在建立的标准。 我对依赖关系注入/ ioc非常陌生,对C#和.NET也很陌生(在VC6和VB6大约十年后,在C#/。NET中很少编写生产代码)。我对现有的各种日志记录解决方案进行了很多调查,因此我认为我对它们的功能集有很好的了解。我只是对注入一个依赖项的实际机制还不够熟悉(或者,也许更“正确”地,是获取一个依赖项的抽象版本)。 我看过其他与日志记录和/或依赖注入相关的帖子,例如: 依赖注入和日志记录接口 记录最佳做法 Log4Net Wrapper类是什么样的? 再次关于log4net和Unity IOC配置 我的问题与“如何使用IOC工具yyy注入xxx日志记录平台”无关。而是,我对人们如何处理包装日志记录平台(通常但不总是建议)和配置(即app.config)感兴趣。例如,以log4net为例,我可以配置(在app.config中)许多记录器,然后以使用如下代码的标准方式获取这些记录器(不依赖注入): private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 另外,如果我的记录器不是以类命名,而是以功能区域命名,则可以这样做: private static readonly ILog logger = LogManager.GetLogger("Login"); private static readonly ILog logger = LogManager.GetLogger("Query"); private static readonly ILog logger = LogManager.GetLogger("Report"); 因此,我想我的“要求”将是这样的: 我想将我的产品的来源与对日志记录平台的直接依赖相隔离。 我希望能够通过某种依赖注入(可能是MEF)直接或间接解析特定的命名记录器实例(可能在同一命名实例的所有请求者之间共享同一实例)。 我不知道这是否很难,但是我希望能够按需获取命名记录器(与类记录器不同)。例如,我可能会基于类名称为我的类创建一个记录器,但是一种方法需要特别繁重的诊断,而我想单独进行控制。换句话说,我可能希望单个类“依赖”两个单独的记录器实例。 让我们从数字1开始。我已经阅读了很多文章,主要是关于stackoverflow的,关于包装是否是个好主意。请参阅上面的“最佳实践”链接,并转到jeffrey hantin的注释中,以获取有关包装log4net的原因的观点。如果您进行了包裹(如果可以有效包裹),您是否将包裹严格地用于注射/去除直接依赖?还是您还会尝试抽象出部分或全部log4net app.config信息? 假设我要使用System.Diagnostics,可能要实现一个基于接口的记录器(甚至使用“通用的” ILogger …

1
创建或获取特定的SPTimeZone实例
创建以下特定实例的最便捷方法Microsoft.SharePoint.SPTimeZone是: SPTimeZone utc = SPRegionalSettings.GlobalTimeZones .OfType<SPTimeZone>() .FirstOrDefault(tz => tz.Information.Bias == 0 && tz.Information.DaylightBias == 0); 这是我能得到的最好的技巧吗? 这对我来说尤其是个问题,因为我想模拟这部分代码以进行单元测试,并强制其始终返回UTC。该属性GlobalTimeZones似乎取决于HttpContext.Current或实际的请求-我在单元测试中没有的先决条件... 注意:我知道只有System.TimeZoneInfo第三方大会迫使我使用SPTimeZone ...

2
为什么递归调用会导致StackOverflow处于不同的堆栈深度?
我试图弄清楚C#编译器如何处理尾部调用。 (答案:不是。但是64位JIT将执行TCE(尾部调用消除)。有限制条件。) 因此,我使用递归调用编写了一个小型测试,该测试打印了在StackOverflowException终止进程之前被调用多少次。 class Program { static void Main(string[] args) { Rec(); } static int sz = 0; static Random r = new Random(); static void Rec() { sz++; //uncomment for faster, more imprecise runs //if (sz % 100 == 0) { //some code to keep this method from being …

7
枚举字母的最快方法
我想像这样遍历字母: foreach(char c in alphabet) { //do something with letter } 字符数组是执行此操作的最佳方法吗?(感觉很hacky) 编辑:度量标准是“在保持可读性和鲁棒性的同时实现最少键入”
74 c#  alphabet 

13
抽象和封装有何不同?
我正在准备面试,并决定重新整理我的OOP概念。有数百篇文章可用,但似乎每个文章对它们的描述都不相同。 有人说 抽象是“识别具有系统变异的通用模式的过程;抽象表示通用模式,并提供了一种指定使用哪种变异的方法”(Richard Gabriel)。 并通过抽象类实现。 一些其他的说 抽象意味着只向对象的客户显示必要的细节 和 假设您的Employee类中有一个方法“ CalculateSalary”,该方法将EmployeeId作为参数,并以整数值返回当月员工的薪水。现在,如果有人想使用该方法。他不需要关心Employee对象如何计算薪水?他唯一需要关注的是方法的名称,其输入参数和所得成员的格式, 我一次又一次地搜索,结果似乎都没有给我一个正确的答案。 现在,封装在所有这些方面适合什么地方? 我搜索并发现了堆栈溢出问题。它说,即使是这些问题的答案也使这里感到困惑。 封装是用作抽象的一部分的策略。封装是指对象的状态-对象将其状态封装起来并从外部隐藏起来;类的外部用户通过其方法与之交互,但无法直接访问类的状态。因此,该类将与状态相关的实现细节抽象出来。 而这里的另一个知名的成员说, 它们是不同的概念。 抽象是完善对象的所有不需要/不重要属性并仅保留最适合您的域的特征的过程。 现在我把整个概念弄糊涂了。我了解抽象类,继承,访问说明符以及所有内容。我只想知道在面试中被问到抽象和/或封装时应该如何回答。 请不要将其标记为重复项。我知道有几个类似的问题。但是,我想避免相互矛盾的解释之间的混淆。谁能建议一个可靠的链接?也欢迎使用stackoverflow问题的链接,除非它再次造成混乱。:) 编辑:我需要答案,有点面向C#

15
从集合中删除项目的最佳方法
一旦知道了项目但不是索引,最好的方法就是从C#中的集合中删除项目。这是执行此操作的一种方法,但充其量似乎并不优雅。 //Remove the existing role assignment for the user. int cnt = 0; int assToDelete = 0; foreach (SPRoleAssignment spAssignment in workspace.RoleAssignments) { if (spAssignment.Member.Name == shortName) { assToDelete = cnt; } cnt++; } workspace.RoleAssignments.Remove(assToDelete); 我真正想做的是找到要按属性(在本例中为名称)删除的项目,而无需遍历整个集合并使用2个其他变量。
74 c#  collections 

8
我应该将所有方法标记为虚拟吗?
在Java中,您可以将method标记为final,以使其无法覆盖。 在C#中,您必须将方法标记为虚拟方法,以使其能够被覆盖。 这是否意味着在C#中,您应该将所有方法标记为虚拟方法(除了一些您不想被覆盖的方法之外),因为您很可能不知道可以通过什么方式继承您的类?

5
HTML Agility Pack按类别获取所有元素
我在html敏捷包中遇到了麻烦,无法找到正确的方法来解决这个问题。 例如: var findclasses = _doc.DocumentNode.Descendants("div").Where(d => d.Attributes.Contains("class")); 但是,显然您可以将类添加到比divs更多的类,所以我尝试了这一点。 var allLinksWithDivAndClass = _doc.DocumentNode.SelectNodes("//*[@class=\"float\"]"); 但这不能解决您添加多个类并且“ float”只是这样的情况之一的情况。 class="className float anotherclassName" 有没有办法处理所有这些?我基本上想选择所有具有class =且包含float的节点。 **答案已记录在我的博客上,并在以下位置提供了完整的解释:Html Agility Pack按类别获取所有元素

3
制作通用属性
我有一个存储序列化值和类型的类。我想要一个属性/方法返回已经强制转换的值: public String Value { get; set; } public Type TheType { get; set; } public typeof(TheType) CastedValue { get { return Convert.ChangeType(Value, typeof(_Type)); } 这在C#中可能吗?
74 c#  .net  generics  properties 

3
在WebApi控制器中读取HttpContent
如何在MVC webApi控制器操作中读取PUT请求上的内容。 [HttpPut] public HttpResponseMessage Put(int accountId, Contact contact) { var httpContent = Request.Content; var asyncContent = httpContent.ReadAsStringAsync().Result; ... 我在这里得到空字符串:( 我需要做的是:找出在初始请求中修改/发送的“哪些属性”(这意味着如果该Contact对象具有10个属性,而我只想更新其中2个属性,则发送和对象只有两个属性,像这样的东西: { "FirstName": null, "LastName": null, "id": 21 } 预期的最终结果是 List<string> modified_properties = {"FirstName", "LastName"}

5
在不同的控制器动作方法之间传递数据
我正在使用ASP.NET MVC 4。我正在尝试将数据从一个控制器传递到另一个控制器。我做错了。我不确定是否可行? 这是我要从中传递数据的源操作方法: public class ServerController : Controller { [HttpPost] public ActionResult ApplicationPoolsUpdate(ServiceViewModel viewModel) { XDocument updatedResultsDocument = myService.UpdateApplicationPools(); // Redirect to ApplicationPool controller and pass // updatedResultsDocument to be used in UpdateConfirmation action method } } 我需要将其传递给此控制器中的此操作方法: public class ApplicationPoolController : Controller { public ActionResult UpdateConfirmation(XDocument xDocument) { …

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.