小编sur*_*ace的帖子

如何在VS中键入时显示方法的完整文档?

标题非常具有描述性......是否有任何扩展名让我看到我正在键入的方法的完整文档?我希望看到文档,因为我可以在对象浏览器中看到它与参数的描述和所有东西,而不仅仅是一些"摘要".

有原因可以选择查看所有覆盖.它可能是知识的一部分,或者我不知道它真正重要的是什么.

c# code-editor visual-studio

27
推荐指数
2
解决办法
1万
查看次数

是什么导致 DriveInfo.IsReady 为 false?

情况

我正在调试一些对目录路径执行一些存在检查的遗留代码。首先,DirectoryPathA如果存在则检查并返回。这应该是通常的情况。如果失败,DirectoryPathB则检查并返回。(如果这也失败了,其他事情就会发生,而不是这个问题的一部分)。代码如下所示:

if (!string.IsNullOrEmpty(DirectoryPathA))
{
    driveInfo = new DriveInfo(DirectoryPathA);
    if (driveInfo.IsReady)
    {
        dInf = new DirectoryInfo(DirectoryPathA);
        if (dInf.Exists)
        {
            return DirectoryPathA;
        }
    }
}

if (!string.IsNullOrEmpty(DirectoryPathB))
{
    dInf = new DirectoryInfo(DirectoryPathB);
    if (dInf.Exists)
    {
        return DirectoryPathB;
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,第一个检查有一个基于 的额外保护DriveInfo.IsReady。之前网络上的文件访问存在问题,所以我的假设是(同样,这是遗留代码)DirectoryPathB如果DirectoryPathA不可用,则引入它作为替代方案。我不知道为什么没有DriveInfo.IsReadyDirectoryPathB.

问题

即使DirectoryPathA是本地目录(因此不会出现网络中断),上面的代码也会偶尔返回DirectoryPathB. 代码被执行多次并被假定为幂等的,但事实并非如此,这会破坏事情。这只是在几个小时内在某些机器上偶尔发生。我无法重现该问题。

驱动器状态在整个程序执行过程中永远不会改变的假设存在一个基本问题。我明白那个。但是,这段代码在大多数情况下似乎都很好,而且过去一直如此。

什么原因DriveInfo.IsReadyfalse

该文件指出

true如果驱动器已准备好;false如果驱动器未准备好。

谢天谢地。备注部分添加

IsReady 指示驱动器是否准备就绪。例如,它指示 CD 是否在 …

c# directory drive contention filesystem-access

5
推荐指数
1
解决办法
803
查看次数

为什么这个错误的对象初始化用花括号甚至编译?

Whille为WPF/MVVM项目的集合创建了一些虚拟数据,我生成了以下错误代码,编译得很好,但在运行时抛出异常.

有一个嵌套的数据对象结构,我错误地只用花括号进行实例化(看起来像编写JavaScript确实会对大脑造成永久性损害).

using System.Collections.ObjectModel;

namespace testapp
{
    class Program
    {
        static void Main(string[] args)
        {
            var collection = new ObservableCollection<TopLevelDataObject>();
            collection.Add(new TopLevelDataObject{Nested = {Bar = 5}});         // NullReferenceException
        }

        class TopLevelDataObject
        {
            public NestedDataObject Nested { get; set; }
            public string Foo { get; set; }
        }

        class NestedDataObject
        {
            public double Bar { get; set; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么要编译?

如果我创建一个匿名类型,比如Nested = new {Bar = 5},我在编译期间收到错误消息(因此失败):

Cannot implicitly convert type '<anonymous type: int Bar>' to 'testapp.Program.NestedDataObject'
Run Code Online (Sandbox Code Playgroud)

为什么在省略 …

c# object-initializers curly-braces

3
推荐指数
1
解决办法
89
查看次数