有没有办法测试T是否继承/实现了一个类/接口?
private void MyGenericClass<T> ()
{
if(T ... inherits or implements some class/interface
}
Run Code Online (Sandbox Code Playgroud) 我希望有一个通用的打印功能... PrintGeneric(T)......在下面的例子中,我缺少什么?
一如既往,感谢您的帮助/见解......
public interface ITest
{}
public class MyClass1 : ITest
{
public string myvar = "hello 1";
}
public class MyClass2 : ITest
{
public string myvar = "hello 2";
}
class DoSomethingClass
{
static void Main()
{
MyClass1 test1 = new MyClass1();
MyClass2 test2 = new MyClass2();
Console.WriteLine(test1.myvar);
Console.WriteLine(test2.myvar);
Console.WriteLine(test1.GetType());
PrintGeneric(test1);
PrintGeneric<test2.GetType()>(test2);
}
// following doesn't compile
public void PrintGeneric<T>(T test)
{
Console.WriteLine("Generic : " + test.myvar);
}
}
Run Code Online (Sandbox Code Playgroud) 通用方法是......
public void PrintGeneric2<T>(T test) where T : ITest
{
Console.WriteLine("Generic : " + test.myvar);
}
Run Code Online (Sandbox Code Playgroud)
我是从Main()调用它的...
Type t = test2.GetType();
PrintGeneric2<t>(test2);
Run Code Online (Sandbox Code Playgroud)
我得到错误"CS0246:类型或命名空间名称'T’无法找到"和"CS1502:最好重载的方法匹配DoSomethingClass.PrintGeneric2 <T>(T)具有无效参数"
这与我之前的问题有关:C#:传递通用对象
我已经读过,在没有使用反射或methodinfo的情况下,无法在运行时确定泛型类型,但是在这个实例中我不太清楚如何这样做.
谢谢,如果你能启发我=)
我试图在BAT脚本中禁用(并启用)TSVNCache,是否可能?还是我需要杀死它?谢谢.
这不是关于正确编码实践的问题,我只是在研究语义.假设我有以下构造函数......
public FooClass(string name = "theFoo")
{ fooName = name; }
public FooClass(string name, int num = 7, bool boo = true) : this(name)
{ fooNum = num; fooBool = boo; }
Run Code Online (Sandbox Code Playgroud)
因此可以使用命名参数......?
FooClass foo1 = new FooClass(num:1);
Run Code Online (Sandbox Code Playgroud)
//我只传递一个命名参数,依靠选项来处理其余的事情
或者没有参数调用构造函数FooClass(string,int,bool)?如......
FooClass foo2 = new FooClass();
Run Code Online (Sandbox Code Playgroud) 我想知道需要采取哪些措施来"破解"相机的固件来添加/更改功能,特别是佳能或奥林巴斯制造的相机.
我可以理解这是一个涉及的主题,但是我应该关注的步骤和我发布的一般概述将不胜感激.
我假设第一步是获取固件,将其加载到反编译器(任何建议?)并检查内容.我承认我之前从未反编译代码,所以这对我来说是一个很好的挑战,任何建议?图书?教程?我应该期待什么?
谢谢堆栈一如既往!
注意:我知道Magic Lantern和CHDK,我想获得关于它们是如何开始并成为技术建议的技术建议.
http://magiclantern.wikia.com/wiki/Decompiling
http://magiclantern.wikia.com/wiki/Struct_Guessing
http://magiclantern.wikia.com/wiki/Firmware_file
有没有办法将'dir'命令的输出读入BAT文件中的数组?或者我是否需要先将其输出到文件中,然后读取文件并删除文件?
目的是获取目录中的文件夹列表,向每个文件夹附加一个数字,然后提示用户输入数字以选择文件夹.
更新:得到它!
SETLOCAL EnableDelayedExpansion
SET /A c=1
FOR /F "tokens=*" %%F in ('dir /on /b /a:d /p %svnLOCAL%') DO (
ECHO !c!. %%F
SET dir_!c!=%%F
SET /a c=c+1
)
REM test array
ECHO !dir_4!
ENDLOCAL
Run Code Online (Sandbox Code Playgroud) 所以如果将变量的字符串名称传递给方法,我知道要使用哪个变量.
在下面的示例中,我需要帮助的区域是PrintVar(字符串)...将字符串参数转换为变量...以便它分别打印出"here be variable 1"和"here be variable 2". .谢谢!
class ReflectionTest
{
class MyObj
{
private string myvar;
public MyObj(string input)
{ this.myvar = input; }
public override string ToString()
{ return ("here be " + myvar); }
}
class MyClass
{
private MyObj var1;
private MyObj var2;
public MyClass()
{
var1 = new MyObj("variable 1");
var2 = new MyObj("variable 2");
}
public void PrintVar(string theVariable)
{
Console.WriteLine(theVariable);
}
}
static void Main()
{
MyClass test = new MyClass();
test.PrintVar("var1"); …Run Code Online (Sandbox Code Playgroud) c# ×5
generics ×3
arrays ×1
batch-file ×1
camera ×1
firmware ×1
methods ×1
reflection ×1
tortoisesvn ×1
tsvncache ×1
types ×1