在这个简单的案例中,什么是好的设计:
假设我有一个基类Car,其中一种方法FillTank(Fuel fuel),燃料也是一个基类,有几个叶类,柴油,乙醇等.
在我的叶子车类上DieselCar.FillTank(Fuel fuel)只允许某种类型的燃料(没有意外:)).现在这是我的关注,根据我的界面,每辆车都可以装满任何燃料,但这对我来说似乎不对,在每次FillTank()实施中检查输入燃料的正确类型,如果没有抛出错误或其他什么.
我怎样才能将这种情况重新设计为更准确的情况,甚至可能吗?如何设计一个基本方法,在没有得到这些"奇怪结果"的情况下输入基类?
是否可以枚举通用约束中"可用"的类型?
T MyMethod<t>() where T : int, double, string
Run Code Online (Sandbox Code Playgroud)
为什么我要这样做是因为我有一个小的评估引擎,并希望编写如下代码:
bool expression.Evaluate<bool>();
Run Code Online (Sandbox Code Playgroud)
要么
int expression.Evaluate<int>();
Run Code Online (Sandbox Code Playgroud)
但我想禁止
MyCustomClass expression.Evalaute<MyCustomClass>();
Run Code Online (Sandbox Code Playgroud) 什么是在c#中遍历methodinfo的最简单方法?
我想遍历方法体并查找字段引用等,并检索类型.
在System.Reflection中有:
mi.GetMethodBody().GetILAsByteArray()
Run Code Online (Sandbox Code Playgroud)
这是一种低级别,在我能够穿越身体之前需要"一些"工作.
我知道Cecil存在,但在使用cecil加载内存程序集时出现问题.我正在使用的程序集并不总是"在磁盘上"它可以是从例如编译的内存程序集.嘘,我不是一个干净的解决方案,而无需将程序集临时写入磁盘.
还有什么其他选择呢?
如果给出两种类型(类型a,类型b),是否有任何"好"的方法来确定这两个是否可以进行比较,求和等?
我在想如果类型实现IConvertible,可以将两者都转换成让我们说十进制并执行" Convert.ToDecimal(a) > Convert.ToDecimal(b)"?
我正在构建一个表达式求值程序,并希望能够处理任何类型的对象,因此需要知道一个类型是否可以与另一个类型进行比较(它不必在两侧都是相同的类型.例如.double > int)
jQuery 1.4.2中存在一个错误,当使用DOM事件和jQuery事件时,select-element上的change事件会被触发两次,这只在IE7/8上发生.这是测试代码:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery(".myDropDown").change(function() {
});
});
</script>
</head>
<body>
<select class="myDropDown" onchange="alert('hello');">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
更新:问题的另一种观点,实际上这是我们的应用程序的真正问题.在没有用DOM事件触及select元素的选择器上绑定实时更改事件也会导致双击.
<html>
<head>
<script src="http://code.jquery.com/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery(".someSelectThatDoesNotExist").live("change", function() {
});
});
</script>
</head>
<body>
<select class="myDropDown" onchange="alert('hello');">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
实际错误的票证:http://dev.jquery.com/ticket/6593
这在我们的应用程序中给我们带来了很多麻烦,因为我们使用混合了jQuery的ASP.NET事件,并且一旦你在任何元素上挂起一个change事件,每个select(下拉列表)都会遇到这个双重触发问题.
在这个问题得到解决之前,有没有人知道解决这个问题的方法?
Trace.Listeners和Debug.Listeners共享相同的内部集合,因此我无法向Trace.Listeners添加跟踪侦听器,也无法向Debug.Listeners添加调试侦听器以区分它们.
我怎样才能做到这一点?
编辑:
为什么我要这样做只是因为我正在为我们的应用程序编写一个日志记录层,我希望通过系统来跟踪不同的日志,其中Debug/Trace是两个日志源(还有其他几个来源)我想跟踪.
如何在程序集中找到每个自定义属性?
如果可以从使用该属性的程序集中找到所有类型,但这还不够.方法,属性,枚举,枚举值,字段等如何
这样做有什么快捷方式,或者是编写代码来搜索某个类型的所有部分(属性,字段,方法等)的唯一方法吗?
Reflector做到了这一点,不知道它是如何实现的.
为什么这段代码会返回"class java.lang.Object"?
Object a = new Object() {
public Object b = new Object(){
public int c;
};
};
System.out.println(a.getClass().getField("b").getType());
Run Code Online (Sandbox Code Playgroud)
为什么内在类型会丢失?我怎样才能反映c场?
编辑:
这个有效(正如在一些答案中指出的那样):
a.getClass().getField("b").get(a) ...
Run Code Online (Sandbox Code Playgroud)
但是我必须调用一个getter,有没有办法用反射元数据反映c?
对于在简单的jQuery选择器等上使用html元素的非有效属性,您有何看法?
例如.
<div name="myDiv"></div>
Run Code Online (Sandbox Code Playgroud)
根据Visual Studio,name属性对div元素无效.
c# ×4
jquery ×2
reflection ×2
.net ×1
asp.net ×1
car-analogy ×1
constraints ×1
debugging ×1
events ×1
generics ×1
html ×1
iconvertible ×1
il ×1
java ×1
logging ×1
methodinfo ×1
oop ×1
trace ×1