在C#中,相当于 "is "关键字的是什么,但使用Type对象
我猜是一个简单的问题,但是在类型类的文档中,他们只讨论getInterfaces方法上的接口. 即. typeof(childClass).xxx(typeof(parensclass) 解决方案 这取决于您的需求;也许可以: bool stringIsObj = typeof(object).IsAssignableFrom(typeof(string)); 或IsSubclassOf: bool stringIsObj = typeof(string).IsSubclassOf(typeof(object)); 其他解决方案 typeof(parentClass).isAssignableFrom(typeof(childClass)) 其他解决方案 我建议您搜索同等标准.而不是使用这样的"是"关键字: if (object is class) { ... } 您可以简单地比较这两者的类型: if( typeof(objec
0 2024-04-16
编程技术问答社区
C#"是 "运算符--是反射吗?
一位同事今天问了一个有趣的问题 - C#关键字/操作员"被视为反射? object tmp = "a string"; if(tmp is String) { } 该操作员在幕后如何实现?它需要反思还是内省?或由于语言的强烈键入性质,是否可以立即访问对象的类型作为内存中对象的顶级属性? msdn P> 请注意,IS运算符仅考虑参考转换,拳击转换和拆箱转换. IS运算符未考虑其他转换,例如用户定义的转换. 可以考虑盒装和未盒装转换的能力似乎对我来说意味着某种内省. 解决方案 参考ECMA-335 ,is操作员生成isinst对象模型IL指令(分区III§4.6),它是基本指令集的一部分,而不是作为反射库的一部分(分区IV§5.5). 编辑:与反射库相比,is运算符非常有效.您可以通过反射进行基本相同的测试基本相同的测试: typeof(T).IsAssignableFrom(obj.GetType()) 编辑2:您对castclass和isi
6 2024-04-13
编程技术问答社区
与Java'的isInstance()相当的C#是什么?
我知道is和as instanceof,但是反射 isinstance()方法? 解决方案 c#中的Java的obj.getClass().isInstance(otherObj)等效为: bool result = obj.GetType().IsAssignableFrom(otherObj.GetType()); 请注意,虽然Java和C#都可以在obj的运行时类型对象(Java java.lang.Class java.lang.Class c4> c#System.Type)上工作(通过.getClass() vs .getType()),Java的isInstance获取对象作为参数,而C#'s IsAssignableFrom期望另一个System.Type对象. 其他解决方案 bool result = (obj is MyClass); // Better than using 'as' 其他解决方案 取决于,如果您不想使用铸件的结果,请
2 2024-04-13
编程技术问答社区
如何从代码中获取当前方法的名称
我知道你可以做 this.GetType().FullName 获得 My.Current.Class 但是我可以叫什么来获得 My.Current.Class.CurrentMethod 解决方案 using System.Diagnostics; ... var st = new StackTrace(); var sf = st.GetFrame(0); var currentMethodName = sf.GetMethod(); 或,如果您想拥有一个辅助方法: [MethodImpl(MethodImplOptions.NoInlining)] public static string GetCurrentMethod() { var st = new StackTrace(); var sf = st.GetFrame(1); return sf.GetMethod().Name; } 用积分更新为@
4 2024-04-10
编程技术问答社区
如何在Perl API中内省重词
我正在研究一些需要序列化perl Regexes的代码,包括任何正则标志.仅支持标志的子集,因此我需要检测到何时在Regex对象中/u(例如/u)的标志. 当前版本的代码执行此操作: static void serialize_regex_flags(buffer *buf, SV *sv) { char flags[] = {0,0,0,0,0,0}; unsigned int i = 0, f = 0; STRLEN string_length; char *string = SvPV(sv, string_length); 然后手动处理string char-char查找标志. 这里的问题是,Regex标志的弦乐从例如(?i-xsm:foo) to (?^i:foo),这会使解析疼痛. 我可以检查perl的版本,或者只是写解析器来处理这两种情况,但是有些东西告诉我,必须有一种优越的内省方法. 解决方案 在Perl中,您将使用re:
4 2024-04-08
编程技术问答社区
用CMake生成SWIG绑定文件
我将如何为使用cmake构建的C项目生成自动绑定? 我想生成python,java,.net,php,perl,tcl,ruby,ruby和八度的绑定. 解决方案 您可以找到一个示例在这里/p> 摘要: 以下示例是用于为Swig接口文件创建Python包装器的CMAKE输入文件,示例.I: # This is a CMake example for Python FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) FIND_PACKAGE(PythonLibs) INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) SET(CMAKE_SWIG_FLAGS "") SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES CP
4 2024-04-07
编程技术问答社区
用CMake生成SWIG绑定文件
我将如何为使用cmake构建的C项目生成自动绑定? 我想生成python,java,.net,php,perl,tcl,ruby,ruby和八度的绑定. 解决方案 您可以找到一个示例在这里/p> 摘要: 以下示例是用于为Swig接口文件创建Python包装器的CMAKE输入文件,示例.I: # This is a CMake example for Python FIND_PACKAGE(SWIG REQUIRED) INCLUDE(${SWIG_USE_FILE}) FIND_PACKAGE(PythonLibs) INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) SET(CMAKE_SWIG_FLAGS "") SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES CP
10 2024-04-07
编程技术问答社区
主题名称超过15个字符?
通过使用PRCTL或PTHREAD_SET_NAME_NP之类的函数,可以更改线程的名称.两种函数的限制至少在Linux 2.6.38中强加了,该名称不能超过15个字符(null终止是第16个字节). 这个15个字符的限制在哪里施加,并且是否有任何(甚至是非正统)的方式? 更新 : 如评论中所述,这是由内核强加的. 可以在此处找到该定义: http://lxr.linux.no/linux+v2 .6.37/include/linux/sched.h#l245 解决方案 15-char限制由内核强制执行: struct task_struct::comm[TASK_COMM_LEN] 宽16字节. 如果要增加它,则必须重新编译内核. 其他解决方案 尽管正常任务名称限制是在内核中设置的,但是您可以通过覆盖指向argv[0]的内存来更改命令行参数(如ps所示).这可用于显示最多一页的其他数据.
10 2024-04-06
编程技术问答社区
在Python中,在运行时改变对函数的引用
我需要在运行时在其他功能中更改对其他功能内部功能的调用. 考虑以下代码: def now(): print "Hello World!" class Sim: def __init__(self, arg, msg): self.msg = msg self.func = arg self.patch(self.func) def now(self): print self.msg def run(self): self.func() def patch(self, func): # Any references to the global now() in func # are replaced with the self.now() method. def myfunc(): now() 然后...
8 2024-04-05
编程技术问答社区
如何以编程方式确定当前类的Java字节码版本?
我有一个情况,部署平台为Java 5,并且在Java 6下的Eclipse发生了开发,我们已经建立了在开始在给定项目上工作时创建新工作空间的过程.因此,所需的步骤之一是将编译器级别设置为Java 5,该级别经常被遗忘. 我们有一台运行部署平台的测试计算机可以在其中运行我们构建的代码并在PC上进行初始测试,但是如果我们忘记切换编译器级别,则程序将无法运行.我们有一台用于创建对客户的构建服务器,它运行良好,但这是用于不需要构建服务器的开发,并且会添加不必要的等待. 问题是:可以通过编程确定当前类的字节代码版本,因此我的代码可以在我本地PC上测试时已经打印出警告? 编辑:请注意,要求是针对当前课程的.这可以通过ClassLoadeer提供吗?或者我必须找到当前类的类文件,然后调查? 解决方案 查看问题: java api要查找JDK版本的类文件是对? 其他解决方案 在类上找到它可以运行的简便方法 有关更多详细信息, oracle.com/javase/1
2 2024-04-05
编程技术问答社区
bash caller builtin从导出的函数中停止工作,为什么?
我使用bash和导出功能有非常奇怪的问题,可以给我一个可靠的答案. 这是我的设置来说明这个问题:bash脚本bar定义和导出函数bar1和bar2. bar2调用bar1. bash脚本bar然后执行bash脚本foo将调用bar1. 呼叫者内置的in in bar1的呼叫才会破裂.这是正常的吗?你能解释为什么吗?您可以简化揭示问题的以下代码吗? 要完全清楚,这是在系统上复制的方法:构建两个文件: cd /tmp cat foo #!/bin/bash bar1 EOF chmod +x foo cat bar #!/bin/bash bar2() { echo "$FUNCNAME IN: $(caller 0)" >&2 } export -f bar2 bar1() { echo "$FUNCNAME BEFORE: $(caller 0)" >&2 bar2 echo "$
6 2024-04-05
编程技术问答社区
有没有一种从字符串表示中设置C/C++成员变量的好方法?(inversepection-lite)
我有一个我希望能够从字符串获得并设置的成员的结构.鉴于C ++没有任何内省,我认为我需要一些具有宏的创造性解决方案,Stringize Operator,也许boost::bind.我不需要完整的序列化或内省,而是" Intropsection-lite" 我想沿着这样的路线有一些东西: struct MyType { int fieldA; int fieldB; }; DECLARE_STRING_MAP(MyType,fieldA); DECLARE_STRING_MAP(MyType,fieldB); MyType t; SET_VALUE_FROM_STRING(MyType,t,"fieldA","3") 而不是具有巨大的if语句. 是否知道是否有整齐的解决方案? 相关问题:对象反射 编辑: 感谢Maxim1000的"映射到int type ::*'技巧 - 这对我有用: #define DEFINE_LOOKUP
2 2024-04-02
编程技术问答社区
在Bash中列出定义的函数
我正在尝试在Bash中编写一些代码,该代码使用内省选择要调用的适当函数. 确定候选者需要知道定义哪些功能.仅使用参数扩展即可在bash中列出定义的变量: $ prefix_foo="one" $ prefix_bar="two" $ echo "${!prefix_*}" prefix_bar prefix_foo 但是,对于函数这样做似乎需要过滤集合的输出 - 一种更随意的方法. 有正确的方法吗? 解决方案 compgen -A function # compgen is a shell builtin 其他解决方案 $ declare -F declare -f :: declare -f _get_longopts declare -f _longopts_func declare -f _onexit ... 所以,杰德·丹尼尔的别名, declare -F | cut -d" " -f3 在一个空间上剪切并回应第三场:
2 2024-03-28
编程技术问答社区
用任意替换的属性名称创建Python类
我很抱歉没有给这个问题一个更好的标题;我发布的原因是我什至没有正确的术语来知道我在寻找什么. 我已经定义了一个属性"垃圾邮件"的类: def SpamClass(object): def __init__(self, arg): self.spam = arg def __str__(self): return self.spam 我想创建一个具有完全相同功能的(sub/兄弟姐妹? def EggsClass(object): def __init__(self, arg): self.eggs = arg def __str__(self): return self.eggs 概括,如何创建具有任意属性名称的功能相同的类?当课程具有复杂的行为时,复制代码似乎很愚蠢. 更新:我同意这闻起来像是不良设计.为了澄清,我不是要以这种愚蠢的方式解决一个特定的问题.我只想知道
12 2024-03-19
编程技术问答社区
检查Python类的属性
我需要一种检查课程的方法,以便我可以安全地识别哪些属性是用户定义的类属性.问题在于函数诸如dir(),Inspect.getMembers()和朋友返回所有类属性,包括:__class__,__doc__,__dict__,__hash__.当然,这是可以理解的,有人可能会说我可以列出一个命名成员的列表,但不幸的是,这些预定义的属性必将随着不同版本的python而更改,因此使我的项目可以在Python项目中进行更改 - 我不喜欢. 示例: >>> class A: ... a=10 ... b=20 ... def __init__(self): ... self.c=30 >>> dir(A) ['__doc__', '__init__', '__module__', 'a', 'b'] >>> get_user_attributes(A) ['a','b'] 在上面的示例中,我想要一种安全的方法来仅检索用户定义的类属性['a','b']而不是" c
12 2024-03-18
编程技术问答社区
在Objective-C中获取一个对象的属性列表
如何获得Objective-C中给定对象属性的列表(以NSArray或NSDictionary的形式)? 想象以下方案:我定义了一个父类,该类别仅扩展NSObject,该类使NSString,a BOOL和NSData对象作为属性.然后,我有几个课程扩展了此父级,每个类别添加了许多不同的属性. 有什么办法可以在 parent 类上实现一个实例方法,该类别通过整个对象并返回(例如(child)类属性的NSArray) c7>是不是父级上的,所以我以后可以将这些NSString用于kvc? 解决方案 我刚刚设法自己得到答案.通过使用OBJ-C运行时库,我可以按照自己想要的方式访问属性: - (void)myMethod { unsigned int outCount, i; objc_property_t *properties = class_copyPropertyList([self class], &outCount); for(i
18 2024-03-18
编程技术问答社区
Swift 2-检查空阵列的类型(自省)。
我目前正在swift 2中进行内省,并且有问题获得数组的特定类型(在此示例中,Array). var prop = obj.valueForKey("strings")! if prop is Array { println("true") } if prop is Array { println("true") } 输出是: true true 虽然应该是 true false 是否有一种方法可以找出数组成员的类型?如果是. mirr类型也没有导致任何成功. 解决方案 有两种方法可以实现您想要的东西: if prop.dynamicType == Array.self(或[Int].self)比if prop.dynamicType == [Int]().dynamicType {更好,因为[Int]()创建了一个未使用的实例"整数数组". 通常,当您检查阵列是否特定时,您打算使用它 以某种
4 2024-03-06
编程技术问答社区
对[任意]数组进行排序
给定一个定义为如下的数组 let list: [Any] 我想对 进行排序 内部的所有值都具有相同的类型Element 和 Element是Comparable. 当它返回排序的数组 时 所以我需要一个函数,当阵列以后面的方式填充阵列 时 let list: [Any] = [10, 11, 0, 2, -1] let list: [Any] = ["Red", "Green", "Blue"] let list: [Any] = [true, false, true, true] 确实返回排序的数组. 什么时候返回nil 另一方面,当list包含以下示例之一 时 let list: [Any] = [CGPointZero, CGPoint(x:1, y:1)] // CGPoint is not comparable let list: [Any] = [10, "Hello"] // Values of different types
12 2024-03-05
编程技术问答社区
在Python中对构造函数__init__的参数进行反省
什么是从__init__中提取参数的方法,而无需创建新实例. 代码示例: class Super: def __init__(self, name): self.name = name 我看起来像Super.__dict__.keys()类型解决方案.只是为了检索名称参数信息而不添加任何值.有这样的选择吗? 解决方案 更新Python 3.3+(如 beeb 在评论中)强> 您可以使用 inspect.signature 在Python 3.3中引入: class Super: def __init__(self, name, kwarg='default'): print('instantiated') self.name = name >>> import inspect >>> inspect.signature(Super.__init__)
12 2024-03-03
编程技术问答社区
你能列出一个函数收到的关键字参数吗?
我有一个dict,我需要将密钥/值作为关键字参数.. d_args = {'kw1': 'value1', 'kw2': 'value2'} example(**d_args) 这可以正常工作,但是如果d_args dict中的值不被example函数接受的值,它显然会死亡. > 这是一个问题,因为我不控制d_args的生成或example函数.它们均来自外部模块,而example仅接受一些关键字 - arguments dict .. 理想情况下我只会做 parsed_kwargs = feedparser.parse(the_url) valid_kwargs = get_valid_kwargs(parsed_kwargs, valid_for = PyRSS2Gen.RSS2) PyRSS2Gen.RSS2(**valid_kwargs) 我可能只会从有效的关键字 - arguments的列表中过滤dict,但我想知道:有没有办法在编程上列出关键字
12 2024-03-03
编程技术问答社区