请考虑以下事项:
class A {}
class B : A {}
class C
{
C()
{
var b = new B();
Foo(b);
Foo2(ref b); // <= compile-time error:
// "The 'ref' argument doesn't match the parameter type"
}
void Foo(A a) {}
void Foo2(ref A a) {}
}
Run Code Online (Sandbox Code Playgroud)
为什么会发生上述编译时错误?两者ref和out参数都会发生这种情况.
VB.NET是否直接等效于C#out函数参数,其中传递给函数的变量不需要初始化?
假设我有:
public class Bob
{
public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想将Value成员作为out参数传递
Int32.TryParse("123", out bob.Value);
Run Code Online (Sandbox Code Playgroud)
但我得到一个编译错误,"'out'参数不归类为变量." 有没有办法实现这一点,或者我将不得不提取变量,àla:
int value;
Int32.TryParse("123", out value);
bob.Value = value;
Run Code Online (Sandbox Code Playgroud) 我想暴露WebClient.DownloadDataInternal方法,如下所示:
[ComVisible(true)]
public class MyWebClient : WebClient
{
private MethodInfo _DownloadDataInternal;
public MyWebClient()
{
_DownloadDataInternal = typeof(WebClient).GetMethod("DownloadDataInternal", BindingFlags.NonPublic | BindingFlags.Instance);
}
public byte[] DownloadDataInternal(Uri address, out WebRequest request)
{
_DownloadDataInternal.Invoke(this, new object[] { address, out request });
}
}
Run Code Online (Sandbox Code Playgroud)
WebClient.DownloadDataInternal有一个out参数,我不知道如何调用它.救命!
我在jQuery中使用Javascript.我想实现params.在C#中,它看起来像这样:
/*
* odp the object to test
* error a string that will be filled with the error message if odp is illegal. Undefined otherwise.
*
* Returns true if odp is legal.
*/
bool isLegal(odp, out error);
Run Code Online (Sandbox Code Playgroud)
在JS中做这样的事情的最佳方法是什么?对象?
function isLegal(odp, errorObj)
{
// ...
errorObj.val = "ODP failed test foo";
return false;
}
Run Code Online (Sandbox Code Playgroud)
Firebug告诉我上述方法可行,但是有更好的方法吗?
我们假设我有一个带out参数的函数,但是我不需要它的值.如果给定结果将丢弃,有没有办法传递没有实际参数?
编辑:
虽然这个问题已被选为可选输出参数的重复, 但只有从方法创建者的角度来看才是这样.如果您是该方法的用户,那么您不想让参数成为可选参数,只是在不声明变量的情况下不使用它.虽然这是不可能的,但使用C#7.0可以在方法调用中声明它.所以代替:
int unusedValue;
TryGetValue("key", out unusedValue);
Run Code Online (Sandbox Code Playgroud)
你得到:
TryGetValue("key", out int unusedValue);
Run Code Online (Sandbox Code Playgroud)
甚至:
TryGetValue("key", out _);
Run Code Online (Sandbox Code Playgroud)
这应该作为答案添加,但是:
据我所知,out参数的唯一用途是调用者可以从单个方法调用中获取多个返回值.但我们也可以使用ref参数获取多个结果值!
那么有没有其他情况下out参数可以证明是有用的,而我们不能使用ref参数呢?
谢谢.
我用out参数写了一个方法:
-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(out)messageCondent
{
messageCondent = [receivedMessage substringFromIndex:2];
return [receivedMessage substringToIndex:1];
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样通过了这个参数:
NSString *messageCondent;
NSString *mode = [myclassobject messageDecryption:message outParam:messageCondent];
Run Code Online (Sandbox Code Playgroud)
但是,有一个问题.out参数值未正确设置.任何人都可以帮我正确地做到这一点吗?
我正在阅读核心C#编程结构,并且很难将我的头部包裹在out参数修饰符周围.我知道通过阅读它做了什么,但我想在使用它的时候想到一个场景.
有人可以给我一个真实世界的例子吗?谢谢.
我试图了解使用JDBC从Oracle存储过程/函数获取表数据的不同方法.六种方式如下:
以下是PL/SQL中的一些示例:
-- schema-level table type
CREATE TYPE t_type AS OBJECT (val VARCHAR(4));
CREATE TYPE t_table AS TABLE OF t_type;
CREATE OR REPLACE PACKAGE t_package AS
-- package level table type
TYPE t_table IS TABLE OF some_table%rowtype;
-- package level cursor type
TYPE t_cursor IS REF CURSOR;
END library_types;
-- and example procedures:
CREATE PROCEDURE p_1 (result OUT t_table);
CREATE PROCEDURE p_2 (result OUT t_package.t_table);
CREATE PROCEDURE p_3 (result OUT t_package.t_cursor);
CREATE FUNCTION f_4 …Run Code Online (Sandbox Code Playgroud) out-parameters ×10
c# ×6
c#-to-vb.net ×1
iphone ×1
javascript ×1
jdbc ×1
objective-c ×1
oracle ×1
polymorphism ×1
properties ×1
reflection ×1
resultset ×1
vb.net ×1