从这样的事情:
print(get_indentation_level())
print(get_indentation_level())
print(get_indentation_level())
Run Code Online (Sandbox Code Playgroud)
我想得到这样的东西:
1
2
3
Run Code Online (Sandbox Code Playgroud)
代码可以用这种方式读取自己吗?
我想要的是更嵌套的代码嵌套部分的输出.与使代码更易于阅读的方式相同,它将使输出更易于阅读.
当然,我可以手动实现,例如.format(),但我想到的是一个自定义打印功能,print(i*' ' + string)其中i缩进级别.这将是在我的终端上进行可读输出的快速方法.
有没有更好的方法来避免辛苦的手动格式化?
我们有一个非常简单的程序来调用Type.GetType静态方法.两个示例都应返回有效的类型实例.实际上只有第二个.看起来使用堆栈爬行时会发生奇怪的事情GetType,但这究竟是什么问题呢?是bug还是一些不起眼的功能?
public class TestClass { }
class Program
{
static void Main(string[] args)
{
var fullName = typeof(TestClass).FullName;
Console.WriteLine("Full name: {0}", fullName);
new[] { fullName }.Select(Type.GetType).ToList().ForEach(t => Console.WriteLine("Method group: '{0}'", t));
new[] { fullName }.Select(t => Type.GetType(t)).ToList().ForEach(t => Console.WriteLine("Closure: '{0}'", t));
}
}
Run Code Online (Sandbox Code Playgroud)
运行:
Full name: GetTypeBeingWeird.TestClass
Method group: ''
Closure: 'GetTypeBeingWeird.TestClass'
Run Code Online (Sandbox Code Playgroud) 可能重复:
C# - "开启类型"有比这更好的选择吗?
如果你想要switch一种类型的对象,最好的方法是什么?
private int GetNodeType(NodeDTO node)
{
switch (node.GetType())
{
case typeof(CasusNodeDTO):
return 1;
case typeof(BucketNodeDTO):
return 3;
case typeof(BranchNodeDTO):
return 0;
case typeof(LeafNodeDTO):
return 2;
default:
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,但我想知道如何解决这个问题.if/else在这种情况下是否适用声明?
或者你使用开关并添加.ToString()到类型?
我想做这样的事情:
List<Animal> animals = new ArrayList<Animal>();
for( Class c: list_of_all_classes_available_to_my_app() )
if (c is Animal)
animals.add( new c() );
Run Code Online (Sandbox Code Playgroud)
所以,我想查看我的应用程序的Universe中的所有类,当我找到一个来自Animal的类时,我想创建一个该类型的新对象并将其添加到列表中.这允许我添加功能而无需更新事物列表.我可以避免以下情况:
List<Animal> animals = new ArrayList<Animal>();
animals.add( new Dog() );
animals.add( new Cat() );
animals.add( new Donkey() );
...
Run Code Online (Sandbox Code Playgroud)
通过上面的方法,我可以简单地创建一个扩展Animal的新类,它将自动被拾取.
更新:2008年10月16日上午9:00太平洋标准时间:
这个问题引起了很多很好的回应 - 谢谢.从回答和我的研究中,我发现我真正想要做的就是在Java下不可能.有一些方法,比如ddimitrov的ServiceLoader机制可以工作 - 但它们对我想要的东西非常重,我相信我只是将问题从Java代码转移到外部配置文件.
另一种表达我想要的方式:我的Animal类中的静态函数查找并实例化从Animal继承的所有类 - 无需任何进一步的配置/编码.如果我必须配置,我也可以在Animal类中实例化它们.我理解,因为Java程序只是一个松散的.class文件联合体,就像它一样.
有趣的是,在C#中,这似乎相当微不足道.
我有一个使用XML和反射的Object类将s 返回到另一个类.
通常这些对象是外部对象的子字段,但偶尔它是我想要动态生成的东西.我尝试过类似的东西,但无济于事.我相信这是因为Java不允许您访问private反射方法.
Element node = outerNode.item(0);
String methodName = node.getAttribute("method");
String objectName = node.getAttribute("object");
if ("SomeObject".equals(objectName))
object = someObject;
else
object = this;
method = object.getClass().getMethod(methodName, (Class[]) null);
Run Code Online (Sandbox Code Playgroud)
如果提供的方法是private,它失败了NoSuchMethodException.我可以通过制作方法public或使另一个类从中派生它来解决它.
长话短说,我只是想知道是否有办法private通过反射访问方法.
从PHP的世界,我决定给C#一个去.我有一个搜索,但似乎无法找到如何做到相当于这个的答案.
$object = new Object();
$vars = get_class_vars(get_class($object));
foreach($vars as $var)
{
doSomething($object->$var);
}
Run Code Online (Sandbox Code Playgroud)
我基本上有一个对象列表.该对象可以是三种不同类型之一,并且具有一组公共属性.我希望能够获得对象的属性列表,循环它们然后将它们写入文件.我认为这与c#反射有关,但这对我来说都是新的.
任何帮助将不胜感激.
有没有办法根据对象的名称获取对象属性的值?
例如,如果我有:
public class Car : Vehicle
{
public string Make { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
var car = new Car { Make="Ford" };
Run Code Online (Sandbox Code Playgroud)
我想写一个方法,我可以传入属性名称,它将返回属性值.即:
public string GetPropertyValue(string propertyName)
{
return the value of the property;
}
Run Code Online (Sandbox Code Playgroud) 使用Java Reflection,是否可以获取局部变量的名称?例如,如果我有这个:
Foo b = new Foo();
Foo a = new Foo();
Foo r = new Foo();
Run Code Online (Sandbox Code Playgroud)
是否可以实现一个可以找到这些变量名称的方法,如下所示:
public void baz(Foo... foos)
{
for (Foo foo: foos) {
// Print the name of each foo - b, a, and r
System.out.println(***);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:这个问题不同于Java有没有办法找到传递给函数的变量的名称?因为它更纯粹地询问关于是否可以使用反射来确定局部变量的名称的问题,而另一个问题(包括接受的答案)更侧重于测试变量的值.
如果对象是泛型类型,我想执行测试.我试过以下但没有成功:
public bool Test()
{
List<int> list = new List<int>();
return list.GetType() == typeof(List<>);
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么,我该如何进行这项测试?
我试图从类对象本身获取类的字符串名称.
// For instance
[NSArray className]; // @"NSArray"
Run Code Online (Sandbox Code Playgroud)
我发现object_getClassName(id obj)但是需要将一个实例传递给它,在我的情况下这是不必要的工作.
那么如何从类对象中获取字符串,而不是实例呢?
reflection ×10
c# ×5
java ×3
.net ×2
asp.net ×1
case ×1
generics ×1
indentation ×1
inheritance ×1
objective-c ×1
private ×1
python ×1
tokenize ×1
types ×1