小编Sco*_*man的帖子

CLR什么时候说对象有终结器?

我知道在C#中,如果你写~MyClass(),这基本上转化为override System.Object.Finalize().因此,无论您是否编写析构函数,CLR中的每个类型都会有一个Finalize()方法(System.Object至少).

1]那么,这是否意味着,默认情况下,每个对象都有一个终结器?

2] CLR决定一个对象应该通过终结队列的基础是什么?

我问这个,因为,我有一个课,说ManagedResourceHolder实施IDisposable,但没有调用GC.SuppressFinalize(this)它的IDisposable.Dispose()方法.该类没有任何非托管资源,并且不需要该~ManagedResourceHolder()方法,这反过来意味着不需要 GC.SuppressFinalize(this)调用,因为没有终结器.

3]在上述场景的上下文中,在实现IDisposable时是否总是需要提供终结器?(即使在没有非托管资源的类上)

该FxCop的规则CA1816是给我一个违反了这一点,我得到的回应在这里,当我问在MSDN上的CA论坛搞糊涂了.

谢谢.

.net c# garbage-collection memory-management

9
推荐指数
1
解决办法
993
查看次数

将XML注释添加到LINQ to SQL设计器生成的类属性

我使用Visual Studio中的LINQ to SQL设计器来创建数据库的对象模型.现在,我想为每个生成的属性添加XML注释,但是在下次刷新dbml文件时,我无法弄清楚如何在不删除属性的情况下执行此操作.

如何才能做到这一点?

xml linq xml-comments

8
推荐指数
1
解决办法
1152
查看次数

使用Visual Studio查找缺少的XML注释内容

在整个或C#源代码中,我们有很多评论错过了实际内容,如下所示:

/// <summary>
/// </summary>
Run Code Online (Sandbox Code Playgroud)

或这个:

/// <summary>
///
/// </summary>
Run Code Online (Sandbox Code Playgroud)

或这个:

/// <param Name="flag"></param>
Run Code Online (Sandbox Code Playgroud)

不幸的是,Visual Studio不会为此类缺失注释生成警告.但是对于我们来说,如果我们可以在视觉工作室内点击列表中的项目(例如,警告列表)然后被带到源代码中的错误位置来纠正它将会很好.此外,在每次构建xml文件时都会看到缺少xml注释内容的列表.你对如何实现这个有任何想法吗?

xml-comments visual-studio

7
推荐指数
2
解决办法
2962
查看次数

如何避免更改堆栈大小并避免在C#中获得堆栈溢出

我一直想在网上和这个网站上找几个小时回答这个问题的答案,我不在那里.

我知道.NET会为应用程序分配1MB,并且最好通过重新编码而不是强制堆栈大小来避免堆栈溢出.

我正在开发一个"最短路径"的应用程序,可以运行大约3000个节点,此时它会溢出.这是导致问题的方法:

    public void findShortestPath(int current, int end, int currentCost)
    {
        if (!weight.ContainsKey(current))
        {
            weight.Add(current, currentCost);
        }
        Node currentNode = graph[current];
        var sortedEdges = (from entry in currentNode.edges orderby entry.Value ascending select entry);
        foreach (KeyValuePair<int, int> nextNode in sortedEdges)
        {
            if (!visited.ContainsKey(nextNode.Key) || !visited[nextNode.Key])
            {
                int nextNodeCost = currentCost + nextNode.Value;
                if (!weight.ContainsKey(nextNode.Key))
                {
                    weight.Add(nextNode.Key, nextNodeCost);
                }
                else if (weight[nextNode.Key] > nextNodeCost)
                {
                    weight[nextNode.Key] = nextNodeCost;
                }
            }
        }
        visited.Add(current, true);
        foreach (KeyValuePair<int, int> nextNode in sortedEdges)
        {
            if(!visited.ContainsKey(nextNode.Key) …
Run Code Online (Sandbox Code Playgroud)

c# stack-overflow

7
推荐指数
3
解决办法
706
查看次数

什么更具可读性?

我有这两段代码,哪一个更具可读性?

  1. 的foreach

    decimal technicalPremium = 0;
    foreach (Risk risk in risks)
    {
         technicalPremium = technicalPremium + risk.TechnicalPremium;
    }
    return technicalPremium;
    
    Run Code Online (Sandbox Code Playgroud)
  2. LINQ

    return risks.Sum(risk => risk.TechnicalPremium);
    
    Run Code Online (Sandbox Code Playgroud)

c# linq lambda readability

6
推荐指数
3
解决办法
986
查看次数

FileSystemWatcher和网络断开?

如何让它在网络中运行?它工作然后它没有理由停止工作(可能因为网络不完美).

.net c# filesystemwatcher .net-2.0

6
推荐指数
1
解决办法
3046
查看次数

向后兼容性有多重要?

在考虑升级开发工具时,向后兼容性有多重要?如果需要对源代码进行重大更改,您还会购买Visual Studio 2010吗?在交易新功能的向后兼容性方面,您的转折点在哪里?

backwards-compatibility

6
推荐指数
1
解决办法
1761
查看次数

可停靠的表格

如何创建一个"可停靠"的表单,类似于Visual Studio中的窗口?

vb.net tabbed-document-interface winforms

4
推荐指数
1
解决办法
8481
查看次数

是否有一个类似于C#的VB.net!运营商?

经过两年的C#,我现在回到VB.net,因为我现在的工作.在C#中,我可以在字符串变量上对null或false值进行简短的测试,如下所示:

if(!String.IsNullOrEmpty(blah))
{
   ...code goes here
}
Run Code Online (Sandbox Code Playgroud)

但是我对如何在VB.net中这样做有点困惑.

if Not String.IsNullOrEmpty(blah) then
   ...code goes here
end if
Run Code Online (Sandbox Code Playgroud)

如果字符串不为null或为空,上述语句是否意味着?Not关键字是否像C#的!运营商一样运作?

vb.net

4
推荐指数
3
解决办法
2万
查看次数

关于Java垃圾收集器,空值和内存泄漏的问题

假设我在java中实现了一个队列,我有一个名为ini的初始节点的引用,另一个名为last的引用.现在,我开始将对象插入队列.有一次,我决定要一个清除队列的操作.然后我这样做:

ini = null;
last = null;
Run Code Online (Sandbox Code Playgroud)

我是否泄漏记忆?ini和last之间的节点都是链接的,我猜仍然有它们的数据,但同时还有垃圾收集器.

另一种方法是访问每个元素,然后将它们对下一个节点的引用置空,但是我基本上就像在C++中那样,除了我不会明确地使用delete.

java garbage-collection reference

4
推荐指数
1
解决办法
1764
查看次数