小编Oma*_*aer的帖子

为什么C#调用者信息属性需要默认值?

我刚刚看到了C#5来电者信息属性(http://msdn.microsoft.com/en-us/library/hh534540.aspx).

这似乎是一个非常有用的功能,我已经阅读了一些文档(http://www.codeproject.com/Tips/606379/Caller-Info-Attributes-in-Csharp).

但是,我只是想知道:为什么必须传递默认值?它们是如何使用的?

以下示例代码显示了如何使用调用者信息属性:

public static void ShowCallerInfo([CallerMemberName] 
  string callerName = null, [CallerFilePath] string 
  callerFilePath = null, [CallerLineNumber] int callerLine=-1)
{
    Console.WriteLine("Caller Name: {0}", callerName);
    Console.WriteLine("Caller FilePath: {0}", callerFilePath);
    Console.WriteLine("Caller Line number: {0}", callerLine);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:什么是默认值null,null以及-1用来做什么?上面的代码如何不同于:

public static void ShowCallerInfo([CallerMemberName] 
  string callerName = "hello", [CallerFilePath] string 
  callerFilePath = "world", [CallerLineNumber] int callerLine=-42)
{
    Console.WriteLine("Caller Name: {0}", callerName);
    Console.WriteLine("Caller FilePath: {0}", callerFilePath);
    Console.WriteLine("Caller Line number: {0}", callerLine);
}
Run Code Online (Sandbox Code Playgroud)

我理解它的方式,这些是可选参数,编译器提供默认值,替换我们分配的默认值.在这种情况下,我们为什么要指定默认值?是否有一些奇怪的边缘情况,编译器可能无法填写值,并转向我们提供的默认值?如果没有,那么为什么要求我们输入这些数据呢?要求开发者提供永远不会使用的默认值似乎相当笨拙.

免责声明:我试过谷歌搜索,但我找不到任何东西.我几乎害怕在SO上提问,因为大多数这样的新手问题都会遇到这样的敌意,但作为最后的手段,我会冒一个问题.主持人/高级用户,没有违法行为 - …

c# c#-5.0 callermembername

12
推荐指数
2
解决办法
2906
查看次数

SQL注入:为什么下面的代码很危险?

实习生编写了以下vb.net代码:

    Public Sub PopulateUsersByName (name As String)
        'Here, the parameter 'name' is unsantized, coming straight from the form

        Dim query As String = ""
        query += vbNewLine + " SELECT Id, FirstName, LastName FROM dbo.[Users]"
        query += vbNewLine + " WHERE FirstName LIKE '" + REPLACE(name, "'", "''") + "'"
        query += vbNewLine + "     OR LastName LIKE '" + REPLACE(name, "'", "''") + "'"

        'Execute SQLCommand with above query and no parameters
        'Then do some other stuff

    END Sub …
Run Code Online (Sandbox Code Playgroud)

t-sql vb.net sanitization sql-injection

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

为什么 resharper 建议:“返回类型可以是 IEnumerable<T>”?

我是 Resharper 的新手并且喜欢它。然而,它最近提出了一些对我来说没有意义的东西,我想知道它为什么提出这个建议。我已经在 Resharper 中禁用了它,但我想知道我是否遗漏了什么......

我写了一个带有签名的函数: List<string> DoSomething()

Resharper 建议我将其更改为:IEnumerable<string> DoSomething().

现在我可以理解为什么方法的参数必须尽可能通用了。它有助于代码更可重用等。但是,我尝试确保我的方法返回的数据是特定的而不是通用的。

有人可以解释为什么 Resharper 建议它做什么吗?

(要查找规则,请转到 Resharper Options \ Code Inspection \ Inspection Severity,然后搜索:“Return type can be IEnumerable”。)

.net generics collections resharper

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

SSIS:Merge vs Union All

免责声明:我正在学习SSIS - 如果这是一个明显的答案,请原谅我,但我找不到任何关于搜索的内容.

似乎Merge转换与Union All转换非常相似,但有以下不同之处:

  1. 合并只能合并2个数据源,而Union All支持更多(我不知道有多少 - 我的导师说256但是没有消息来确认 - 而且MSDN没有提到上限).
  2. 合并需要对输入进行排序,而Union All则不需要.

除了这些差异之外,似乎没有太多不同之处.它们都是部分阻挡,从我的有限测试中,我也看不出任何明显的性能差异.

在我搜索的任何地方,我发现建议尽可能使用"合并",如果有超过2个数据源,或者源数据未排序,则使用"全部联盟".

我的问题是,为什么?为什么我不会到处使用Union All?合并有什么意义?

再一次,如果这是一个非常基本/新手的问题,我很抱歉,但我的导师不知道答案,搜索也不是很有成效.

谢谢!

注意: 似乎(从其他一些SO答案中,人们正在混淆"Merge"和"Merge Join".这是两个不同的事情.

merge ssis union-all

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