小编Cri*_*scu的帖子

为什么Java增量运算符允许在没有显式转换的情况下缩小操作?

可能重复:
Java + =运算符

在Java中,这是无效的(不编译),如预期的那样:

long lng = 0xffffffffffffL;
int i;
i = 5 + lng;    //"error: possible loss of magnitude"
Run Code Online (Sandbox Code Playgroud)

但这很好(?!)

long lng = 0xffffffffffffL;
int i = 5;
i += lng;       //compiles just fine
Run Code Online (Sandbox Code Playgroud)

这显然是一个缩小的操作,可能超出int范围.那么编译器为什么不抱怨呢?

java precision compiler-errors

26
推荐指数
2
解决办法
858
查看次数

无法在自动属性设置器上设置断点?为什么?

显然VS 2008不允许在自动属性的setter上设置断点.

即如果我定义这样的自动属性:

    public int CurrentFramesize
    {
        get; 
        protected set;
    }
Run Code Online (Sandbox Code Playgroud)

然后尝试在setter行上设置断点,整个auto-property变为breakpoint-red.

这适用于普通属性,所以任何想法为什么自动属性得到这种特殊(限制性)处理?它们不仅仅是具有隐藏背景场的正常属性的语法糖吗?

debugging breakpoints automatic-properties .net-3.5 visual-studio-2008

25
推荐指数
1
解决办法
4650
查看次数

什么是git staging以及为什么Hg*表面上*不支持它?

汞文档状态hg不支持等同于Git的指数开箱即用,并使用类似的行为扩展(记录或MQ)建议.

首先,我的实地经验非常少git,所以让我说明我对git中升级概念的理解:

  • 有工作副本,包含许多已更改的文件,每个文件都有许多已更改的块.
  • 然后,用户(可能重复地)用于git add选择将提交哪些文件.
  • 或者,用于git add -p仅选择文件中的某些块以便稍后提交.
  • 执行a git commit将以前选择的更改添加到存储库.

因此staging area,对我来说,整体而言是一个浮夸的名称,用于选择工作副本中的哪些更改将在下一次提交中进行.

如果我还没完全关闭,那么,为什么每个人,包括官方文档,都说明Mercurial不支持这个?

我问,因为上面的确切工作流程在TortoiseHg中是微不足道的:

在此输入图像描述

  • 在左侧窗格中 - 选择要包含在提交中的整个文件
  • 在右下方窗格中 - 选择要包含的单个块
  • 点击"提交".

我不知道hgTortoiseHg使用什么命令,但是我再也不需要关心了.(它没有使用此AFAICT的任何扩展名)

git我缺少的分期概念还有更多吗?

git mercurial tortoisehg staging

23
推荐指数
2
解决办法
3889
查看次数

C#:List <T> .ForEach(...)对普通foreach循环的任何好处?

我想知道为什么List<T>.ForEach(Action<T>)存在.

这样做有什么好处/差别:

elements.ForEach(delegate(Element element){ element.DoSomething(); });
Run Code Online (Sandbox Code Playgroud)

过度

foreach(Element element in elements) { element.DoSomething();}
Run Code Online (Sandbox Code Playgroud)

c# foreach c#-3.0

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

C#编译器应该发出警告但不是吗?

我的团队中的某个人尝试在空的catch子句中修复"未使用的变量"警告.

try { ... } catch (Exception ex) { }
Run Code Online (Sandbox Code Playgroud)

- >发出关于ex不使用的警告.到现在为止还挺好.

修复是这样的:

try { ... } catch (Exception ex) { string s = ex.Message; }
Run Code Online (Sandbox Code Playgroud)

看到这个,我想"很棒,所以现在编译器会抱怨s没有被使用."

但事实并非如此!这条代码没有警告,我无法弄清楚原因.有任何想法吗?

PS.我知道将异常静音的全能条款是一件坏事,但这是一个不同的话题.我也知道通过做这样的事情可以更好地消除初始警告,这也不是重点.

try { ... } catch (Exception) { }
Run Code Online (Sandbox Code Playgroud)

要么

try { ... } catch { }
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction warnings try-catch

18
推荐指数
2
解决办法
1521
查看次数

C# - 通过反射获取简单类型的用户友好名称?

Type t = typeof(bool);
string typeName = t.Name;
Run Code Online (Sandbox Code Playgroud)

在这个简单的例子中,typeName将具有该值"Boolean".我想知道是否/如何让它说出来"bool".

对于int/Int32,double/Double,string/String也是如此.

c# reflection types

18
推荐指数
2
解决办法
5605
查看次数

Python:有一个类似C的for循环吗?

我可以在Python中做这样的事吗?

for (i = 0; i < 10; i++):
  if someCondition:
     i+=1
  print i
Run Code Online (Sandbox Code Playgroud)

我需要能够根据条件跳过一些值

编辑:到目前为止,所有解决方案都建议根据已知条件以这种或那种方式修剪初始范围.这对我没用,所以让我解释一下我想做什么.

我想手动(即没有getopt)解析一些cmd行args,其中每个'keyword'都有一定数量的参数,如下所示:

for i in range(0,len(argv)):
    arg = argv[i]
    if arg == '--flag1':
       opt1 = argv[i+1]
       i+=1
       continue
    if arg == '--anotherFlag':
       optX = argv[i+1]
       optY = argv[i+2]
       optZ = argv[i+3]
       i+=3
       continue

    ...
Run Code Online (Sandbox Code Playgroud)

python for-loop

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

Linq从两个列表返回所有元素对?

给定列表l1 = {1, 2},l2 = {4, 5, 6 }我想获得一个包含元素的新列表:

rez = { {1, 4}, {1, 5}, {1, 6}, {2, 4}, {2, 5}, {2, 6} }
Run Code Online (Sandbox Code Playgroud)

建议?

.net c# linq

16
推荐指数
1
解决办法
6313
查看次数

Lazy <T>实现和.NET泛型

我一直在寻找懒惰初始化的方法,并找到Lazy<T>了.NET 4中包含的内容.

我正在考虑推出自己的Lazy<T>.NET 3.5实现(使用更简单的多线程策略),我遇到了以下问题:

Lazy基本上有两种类型的构造函数:

class Lazy<T> {

    public Lazy(){...} // ctor #1
Run Code Online (Sandbox Code Playgroud)

它使用T的默认构造函数来创建T的实例,和

    public Lazy(Func<T> func){...} // ctor #2
Run Code Online (Sandbox Code Playgroud)

这让调用者决定如何创建T的实例.

现在问题在于:

如果我想要第一个ctor的编译时检查,我将添加一个限制

class Lazy<T> where T: new() {...}
Run Code Online (Sandbox Code Playgroud)

在班级.这将允许我new T()用来创建一个实例; 但是这个限制对于第二个ctor来说不是必需的,更糟糕​​的是,它也限制了我可以使用的类型(对于那些有默认ctor的人)

如果我想能够使用任何类型与第二个ctor,我将不会设置任何限制,并在第一个ctor将使用反射,以确保T有默认的ctor.但是,这种方法缺少编译时检查,如果第一个ctor使用了错误的类型,则只会抛出运行时异常.

我的问题是:我可以充分利用这两个世界吗?

理想情况下,我想对ctor#1的每次使用进行编译时检查,但同时能够将ctor#2用于没有默认ctor的类型.

Microsoft实现如何做到这一点?(我不能轻易访问.NET 4源代码或dll).

编辑:(在"反射器"之后的MS组件)

我检查了参考实现,它没有进行编译时检查.
它使用反射作为'默认ctor'的情况,当然如果事情变坏则伴随着运行时异常.

.net c# generics reflection lazy-loading

15
推荐指数
2
解决办法
3674
查看次数

为什么Linq Cast <>助手不能使用隐式强制转换操作符?

请在决定投票前重复阅读...

我有一个类型,实现了implicit cast另一种类型的运算符:

class A
{
    private B b;
    public static implicit operator B(A a) { return a.b; }
}
class B
{
}
Run Code Online (Sandbox Code Playgroud)

现在,隐式和显式转换工作正常:

B b = a;
B b2 = (B)a;
Run Code Online (Sandbox Code Playgroud)

......那么Linq怎么.Cast<>没有?

A[] aa = new A[]{...};
var bb = aa.Cast<B>();  //throws InvalidCastException
Run Code Online (Sandbox Code Playgroud)

看一下源代码.Cast<>,没有太大的魔力:如果参数真的是一个特殊情况IEnumerable<B>,那么:

foreach (object obj in source) 
    yield return (T)obj; 
    //            ^^ this looks quite similar to the above B b2 = (B)a;
Run Code Online (Sandbox Code Playgroud)

那么为什么我的显式演员会工作,而不是里面的演员.Cast<>? …

c# linq casting coercion implicit-conversion

15
推荐指数
2
解决办法
3886
查看次数