我正在创建一个函数,我需要传递一个对象,以便它可以被函数修改.有什么区别:
public void myFunction(ref MyClass someClass)
Run Code Online (Sandbox Code Playgroud)
和
public void myFunction(out MyClass someClass)
Run Code Online (Sandbox Code Playgroud)
我应该使用哪个以及为什么?
是否可以使用Moq(3.0+)分配out/ ref参数?
我看过使用Callback(),但Action<>不支持ref参数,因为它基于泛型.我也最好It.Is在ref参数的输入上放置一个约束(),尽管我可以在回调中做到这一点.
我知道Rhino Mocks支持这个功能,但我正在研究的项目已经在使用Moq了.
我正在打电话:
myResult = MakeMyCall(inputParams, out messages);
Run Code Online (Sandbox Code Playgroud)
但我实际上并不关心这些消息.如果它是一个输入参数我不关心我只是传入一个null.如果是回归我不关心我只是把它关掉.
有没有办法用out做类似的事情,或者我是否需要声明一个我将忽略的变量?
考虑一个返回两个值的函数.我们可以写:
// Using out:
string MyFunction(string input, out int count)
// Using Tuple class:
Tuple<string, int> MyFunction(string input)
// Using struct:
MyStruct MyFunction(string input)
Run Code Online (Sandbox Code Playgroud)
哪一个是最佳实践,为什么?
我不明白何时应该使用输出参数,如果我需要返回多个类型,我个人将结果包装成新类型,我发现使用它比使用更容易.
我见过像这样的方法,
public void Do(int arg1, int arg2, out int result)
Run Code Online (Sandbox Code Playgroud)
有没有真正有意义的案例?
怎么样TryParse,为什么不返回一个ParseResult类型?或者在较新的框架中返回一个null-able类型?
错误:安全标头无效数组
(
[TIMESTAMP] => 2014%2d04%2d29T07%3a24%3a29Z
[CORRELATIONID] => 6af6749c848d6
[ACK] => Failure
[VERSION] => 109%2e0
[BUILD] => 10800277
[L_ERRORCODE0] => 10002
[L_SHORTMESSAGE0] => Security%20error
[L_LONGMESSAGE0] => Security%20header%20is%20not%20valid
[L_SEVERITYCODE0] => Error
)
Run Code Online (Sandbox Code Playgroud)
我一次又一次地得到这个错误,无法继续前进.我已经检查了所有的api用户名,密码和签名,一切都是正确的,但主要的问题是,所有的东西都已存储在paypal沙盒帐户中,但它无法返回页面.我的意思是说横切显示在沙盒帐户中,但它不能发送到显示页面.我错了吗?
我今天早些时候试过这个:
public interface IFoo
{
IEnumerable<int> GetItems_A( ref int somethingElse );
IEnumerable<int> GetItems_B( ref int somethingElse );
}
public class Bar : IFoo
{
public IEnumerable<int> GetItems_A( ref int somethingElse )
{
// Ok...
}
public IEnumerable<int> GetItems_B( ref int somethingElse )
{
yield return 7; // CS1623: Iterators cannot have ref or out parameters
}
}
Run Code Online (Sandbox Code Playgroud)
这背后的理由是什么?
我的应用程序有许多System.out.println()语句.
我想从println捕获消息并将它们发送到标准记录器(Log4j,JUL等).
怎么做 ?
说我有以下代码:
static void Fjuk(out string str)
{
str = "fjuk!";
throw new Exception();
}
static void Main(string[] args)
{
string s = null;
try
{
Fjuk(out s);
}
catch (Exception)
{
Console.WriteLine(s ?? "");
}
}
Run Code Online (Sandbox Code Playgroud)
当我测试它时,s已被初始化为"fjuk!" 当它在catch块中使用时.
这是由规范保证还是依赖于实现?(我已经搜索了C#3规范,但无法找到我自己)
Func<a, out b, bool>,只是不编译,如何声明我想要第二个参数是out一个?
我想这样使用它:
public class Foo()
{
public Func<a, out b, bool> DetectMethod;
}
Run Code Online (Sandbox Code Playgroud)