小编Tar*_*rec的帖子

初始化ThreadStatic字段仍会导致NullReferenceException

我自己写了一个多线程随机生成器

public static class MyRandGen
{
    private static Random GlobalRandom = new Random();
    [ThreadStatic]
    private static Random ThreadRandom = new Random(SeedInitializer());
    private static int SeedInitializer()
    {
        lock (GlobalRandom) return GlobalRandom.Next();
    }

    public static int Next()
    {
        return ThreadRandom.Next();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它在抛出Next()时抛出了NullReferenceException,我不明白.这种初始化ThreadStatic字段是否被禁止?

我知道我可以检查每次都是否已初始化该字段,但这不是我正在寻找的解决方案.

c# random thread-safety threadstatic

37
推荐指数
1
解决办法
7989
查看次数

在访问之前可能不会初始化Out参数

为什么是下面的代码

private static List<WorkflowVariableDataSet> MergeDatasetsListBranch(out List<WorkflowVariableDataSet> datasetsList)
{
    if(datasetsList == null)
        datasetsList=new List<WorkflowVariableDataSet>();
    datasetsList=new List<WorkflowVariableDataSet>();
    return datasetsList;
}
Run Code Online (Sandbox Code Playgroud)

在第一个if语句处生成错误:

Out parameter 'datasetsList' might not be initialized before accessing.
Run Code Online (Sandbox Code Playgroud)

我知道它现在应该是未初始化的,但是这个词might表明错误在于可能未初始化的对象访问(当它甚至没有被访问时,它是引用,被检查).Ofc不会发生ref关键字,但我很好奇参考检查是如何违反out-parameters策略的.

编辑 我编辑了问题和示例:无论如何,out对象将在方法内初始化.问题是:为什么未初始化的对象不能为空?这有什么不同于:

object o;
if(o==null)
    ...
Run Code Online (Sandbox Code Playgroud)

c# initialization out

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

为什么Stack.Peek()是一个方法?

如标题中所示.为什么Stack类需要一个方法来返回顶层对象的引用?我总是被告知,方法表明涉及一些计算,而简单的对象应该返回属性而不是.Peek()方法没有参数,在代码级别上它(我认为)是一个简单的操作.

问题是:是否存在特定的原因?任何影响性能的隐藏行为?

编辑:我不知道类的实现,但是如果方法使用下面的枚举器,那么多次迭代到最后一个元素是不明智的.另一方面,如果它是单一的IList,那么它不应该对性能产生更大的影响.

c# stack peek

9
推荐指数
2
解决办法
4309
查看次数

如何在删除{}括号时阻止VisualStudio扩展所有内容

我前几天问了这个问题并没有得到答案,所以我会再试一次.

我喜欢通过折叠我目前不使用的方法,注释和xml摘要来保持我的代码.但是,每次我在方法,循环,switch语句或代码的任何部分(任何包含{}支撑)中编辑一些大括号时,下面的所有内容都会在1秒后扩展.一切都向下展开,直到当前文件(或区域,如果编辑的代码位于其中)结束.

我不能再忍受了我已经厌倦了一直使用Ctrl+ M+ O然后再次重新找到编辑的字段.VS2010有什么选项或扩展名,可以解决我的问题吗?

更新 我开始意识到没有办法解决问题.但是我也可以接受一个修改过的问题的答案:是否有一种方法或工具可以让我自动删除{}支持只包含1条指令的对?对我的问题来说,这是一个可以接受的解决方法.

c# refactoring visual-studio

8
推荐指数
2
解决办法
1999
查看次数

RemoveRange()方法如何在List <>中工作?

如标题.我知道它可能在删除项目之前和之后合并了2个子列表,但是在删除LAST元素时该方法的行为如何?换句话说:它是否以某种方式复制了删除索引之前所有元素?我只是对在巨型列表上使用RemoveRange的性能感到好奇(假设说5000个元素)只是为了删除fe中的最后2个.

如果它复制了那么,是否有办法更改一些设置List大小的内部变量(并将其余的已分配元素视为垃圾)?

我只是设法找到一个信息,它是一个O(n)复杂度算法,但我不确定该情况下的"n"是列表大小,还是要删除的项目数.

任何提示都会很高兴.

.net c# ienumerable list

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

JSON异常:org.json.JSONException:未终止的数组

我正在开发一个Android应用程序 - 它从服务器请求一些数据,服务器以JSON格式返回数据.除了API之外,一切正常.调试后,我发现了这个异常:

org.json.JSONException: Unterminated array at character 152 of

{
    "total": "2",
    "result": [
        {
            "id": "15",
            "ename": "Horror movies based on true stories",
            "vname": "Nh?ng phim kinh d? d?a trên chuy?n có th?t",
            "movies": "16"
        }{
            "id": "14",
            "ename": "IMDB Top 250",
            "vname": "250 b? phim hay nh?t m?i th?i ??i",
            "movies": "127"
        }{
            "id": "13",
            "ename": "10 good movies for women",
            "vname": "10 b? phim hay dành cho phái ??p",
            "movies": "10"
        }{
            "id": "12",
            "ename": "The …
Run Code Online (Sandbox Code Playgroud)

java android json

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

覆盖WinForms中的事件处理程序

我有一个带有自定义控件的表单.该控件在ItemChanged事件上有一个事件处理程序.

private void ncNomSimple_ItemChanged(object sender, EventArgs e)
{
    some code..
}
Run Code Online (Sandbox Code Playgroud)

我继承了这个表单,因此我在我的新表单中有控件和事件但是我希望在我的新表单中为该事件调用另一个事件处理程序,而不是上面的事件.我怎样才能做到这一点?

c# events winforms

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

为什么char'\''与char'''相同?

快速的问题.为什么这两行都有效?

char x = '\"';
char y = '"';
Run Code Online (Sandbox Code Playgroud)

如果"是一个特殊字符,第二行不应该被标记为不正确吗?

c# char special-characters

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

使用linq将几个列表合并为一个

是否有一种简单的方法可以获取相同大小的少量列表,并使用linq在每个索引中创建一个新的最小值/最大值?我的意思是如何比较相同索引的项目,并选择哪一个是Max或Min,如下所示:

List<List<int>> Some2dList = new List<List<int>>
                 { new List<int> { 1, 2, 3, 4, 5 }, 
                   new List<int> { 5, 4, 3, 2, 1 } } ;
List<int> NewList = new List<int>(5);

for(int i=0; i< 5; i++)
{
    int CurrentHighest=0;
    for(int j=0; j<2; j++)
    {
        if (Some2dList[j][i] > CurrentHighest)
            CurrentHighest = Some2dList[j][i];
    }
    NewList.Add(CurrentHighest);
}
//Which gives me {5,4,3,4,5}
Run Code Online (Sandbox Code Playgroud)

我简化了那些循环看起来更清晰.我知道我可以使用Concat和GroupBy,然后从每个中选择Max,但对于没有键值的简单类型和类,我无法弄明白.

编辑:我应该更精确.示例中的列表是手动分配的,但我问的是解决方案,这对于任何数量的列表都是灵活的.此外,列表总是大小相同.

c# linq merge list

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

.NET 中按距离对点列表进行排序

我需要按距离对点列表进行排序。

所以对于例如

input : [[1,2],[5,10],[2,4]...]
output : [[1,2],[2,4],[5,10]...]  
Run Code Online (Sandbox Code Playgroud)

(假设几何上 [1,2] 和 [2,4] 最接近,并且 [2,4] 和 [5,10] 最接近。

我需要他们对其进行排序,以便它们按距离排序,即在几何图上,点 a 最接近点 b ,点 b 最接近 c 等等。

任何想法?

编辑:代码示例

public class Point
{
   public double X {get;set;}
   public double Y {get;set;}
}


List<Point> points = new List<Point>();
Run Code Online (Sandbox Code Playgroud)

假设我的点列表是按随机顺序填充的(而不是按几何距离)。所以点看起来像......

点 ~ [[1,2],[5,10],[2,4]...]

现在我的图表控件只需获取第一点和第二点并在它们之间画一条线。这意味着它不关心它的几何顺序。如果我简单地提供上面的“点”列表,它将在每个点之间绘制线条,从图表的角度来看,它看起来不正确,因为它们将是“之字形”曲折”。

为了确保图表控件绘制一条直线(而不是之字形),我必须以正确的顺序传递点,看起来像......

destination points ~ [[1,2],[2,4],[5,10]...]  
Run Code Online (Sandbox Code Playgroud)

所以我的问题是如何实现这一目标。

注意:此处无法更改图表控件。

谢谢

.net c# geometry points

0
推荐指数
1
解决办法
6966
查看次数