标签: out-parameters

为什么匿名委托/ lambdas不在out/ref参数上推断类型?

StackOverflow上的几个C#问题询问如何使用outref参数创建匿名委托/ lambdas .例如,见:

为此,您只需指定参数的类型,如:

public void delegate D(out T p);
// ...
D a = (out T t) => { ... };      // Lambda syntax.
D b = delegate(out T t) { ... }; // Anonymous delegate syntax.
Run Code Online (Sandbox Code Playgroud)

我很好奇的是为什么明确要求类型.有这种情况的特殊原因吗?也就是说,从编译器/语言的角度来看,为什么不允许以下内容?

D a = (out t) => { ... };      // Lambda syntax -- implicit typing.
D b = delegate(out t) { ... }; // Anonymous delegate syntax -- implicit typing.
Run Code Online (Sandbox Code Playgroud)

甚至更好,只是:

D a = (t) …
Run Code Online (Sandbox Code Playgroud)

c# lambda delegates anonymous-methods out-parameters

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

在C#中删除参数?

在stackoverflow上读取后,在检查DateTime的格式的情况下,您应该使用DateTime.TryParse.在尝试了一些正则表达式后,他们似乎变得冗长而讨厌,希望覆盖大量的格式.

但TryParse需要一个"out"参数,因为我只想进行验证格式检查,所以我不需要实际的结果.

所以我留下了一个保持"out"结果的变量,并且我不做任何事情.有没有办法,所以我不必做一个out参数?

所以我摆脱了这个警告,并停止变量只是飞来飞去.

.net c# out-parameters

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

为什么匿名方法中不允许使用out参数?

这不是使用匿名方法的ref或out参数调用方法的欺骗

我想知道为什么在匿名方法中不允许输出参数.不允许ref参数对我来说更有意义,但是out参数不是那么多.

你对此有何看法?

c# anonymous-methods out-parameters ref-parameters

14
推荐指数
2
解决办法
7307
查看次数

什么时候C#'out'或'ref'参数的值实际返回给调用者?

当我对一个outref参数进行赋值时,是否会立即将值赋给调用者提供的引用,还是在方法返回时分配给引用的outref参数值?如果方法抛出异常,则返回值吗?

例如:

int callerOutValue = 1;
int callerRefValue = 1;
MyMethod(123456, out callerOutValue, ref callerRefValue);

bool MyMethod(int inValue, out int outValue, ref int refValue)
{
    outValue = 2;
    refValue = 2;

    throw new ArgumentException();

    // Is callerOutValue 1 or 2?
    // Is callerRefValue 1 or 2?
}
Run Code Online (Sandbox Code Playgroud)

.net c# out-parameters ref-parameters

14
推荐指数
2
解决办法
1517
查看次数

C# - 如何将'out'参数传递给lambda表达式

我有一个带有以下签名的方法:

private PropertyInfo getPropertyForDBField(string dbField, out string prettyName)
Run Code Online (Sandbox Code Playgroud)

在其中,我prettyName根据给定的值找到相关值dbField.然后,我想要查找具有该名称的所有属性(如果有)prettyName,因此我尝试执行以下操作:

IEnumerable<PropertyInfo> matchingProperties =
    getLocalProperties().Where(prop =>
        prop.Name.Equals(prettyName)
    );
Run Code Online (Sandbox Code Playgroud)

但是,这会产生以下错误:

不能在匿名方法,lambda表达式或查询表达式中使用ref或out参数'prettyName'

通过我试图prettyNameWherelambda参数中使用的方法中的点,prettyName肯定是初始化的.我return如果prettyName无法初始化为有效值.我可以在这里做一些技巧让我prettyName在lambda表达式中使用吗?

编辑:如果重要的话,我正在使用.NET 3.5.

c# linq lambda out-parameters

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

将<T>列为"out"参数会导致错误.为什么?

在这段代码中:

public bool SomeMethod(out List<Task> tasks)
{
    var task = Task.Factory.StartNew(() => Process.Start(info));
    tasks.Add(task);
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,"使用未分配的参数'任务'".为什么?

在MSDN示例中,只使用out参数

class OutExample
{
    static void Method(out int i)
    {
        i = 44;
    }

    static void Main()
    {
        int value;
        Method(out value);
        // value is now 44
    }
}
Run Code Online (Sandbox Code Playgroud)

是因为List<T>

c# list out-parameters

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

DynamicMethod和out-parameters?

如何为具有out-parameter 的委托定义DynamicMethod ,如下所示?

public delegate void TestDelegate(out Action a);
Run Code Online (Sandbox Code Playgroud)

假设我只想要一个将a参数设置为null调用方法的方法.

请注意,我知道处理这个问题的一个更好的方法是让方法返回Action委托,但这只是一个较大项目的简化部分,并且该方法已经返回一个值,我需要处理out参数除了它,因此问题.

我试过这个:

using System;
using System.Text;
using System.Reflection.Emit;

namespace ConsoleApplication8
{
    public class Program
    {
        public delegate void TestDelegate(out Action a);

        static void Main(String[] args)
        {
            var method = new DynamicMethod("TestMethod", typeof(void),
                new Type[] { typeof(Action).MakeByRefType() });
            var il = method.GetILGenerator();

            // a = null;
            il.Emit(OpCodes.Ldnull);
            il.Emit(OpCodes.Starg, 0);

            // return
            il.Emit(OpCodes.Ret);

            var del = (TestDelegate)method.CreateDelegate(typeof(TestDelegate));
            Action a;
            del(out a);
        } …
Run Code Online (Sandbox Code Playgroud)

c# out-parameters dynamicmethod

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

C#:函数中的'out'out'参数是对象属性/变量吗?

C#:函数中的'out'out'参数是对象属性/变量吗?

例如:

我可以调用函数如下:

someFunction(x, y, out myObject.MyProperty1)
Run Code Online (Sandbox Code Playgroud)

c# out-parameters

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

如何在Java中创建IN OUT或OUT参数

在PL/SQL(或许多其他语言)中,我可以使用IN OUT或OUT参数,这些参数是从过程返回的.如何在Java中实现类似的功能?

我知道这个伎俩:

public void method(String in, String[] inOut, String[] inOut2) {
  inOut[0] = in;
}
Run Code Online (Sandbox Code Playgroud)

其中in参数表示IN参数,inOut参数可以包含返回值.惯例将String[] inOut是一个数组inOut.length == 1.

那有点笨拙.

编辑反馈答案:其他技巧包括:

  • holder/wrapper类,但我不想引入任何新类型,回调等.
  • 返回值:我想要一个通用的解决方案.即一个涉及几个IN OUT参数.
  • IN OUT参数的包装器作为返回值:这是一个可行的选项,但仍然不太好,因为必须以某种方式生成包装器

有没有人知道更好的方法来实现这一目标?我需要一般解决方案的原因是因为我想在数据库模式中从PL/SQL生成便利源代码.

java language-agnostic parameters out-parameters

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

C#:如何使用带有"out"变量的泛型方法

我想创建一个简单的泛型函数

void Assign<T>(out T result) 
{
  Type type = typeof(T);
  if (type.Name == "String")
  {
     // result = "hello";
  }
  else if (type.Name == "Int32")
  {
     // result = 100;
  } 
  else result = default(T);
}
Run Code Online (Sandbox Code Playgroud)

用法:

int value;
string text;

Assign(value); // <<< should set value to 100
Assign(text); // <<< should set text to "hello"
Run Code Online (Sandbox Code Playgroud)

我的问题是如何编写代码来设置这些值,即.评论部分中缺少的代码.

谢谢你的帮助.

c# generics out-parameters generic-method

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