使用反射,我试图找到从给定基类继承的类型集.花了很长时间才弄清楚简单的类型,但是当涉及到泛型时我很难过.
对于这段代码,第一个IsAssignableFrom返回true,但第二个返回false.然而,最后的任务编译得很好.
class class1 { }
class class2 : class1 { }
class generic1<T> { }
class generic2<T> : generic1<T> { }
class Program
{
static void Main(string[] args)
{
Type c1 = typeof(class1);
Type c2 = typeof(class2);
Console.WriteLine("c1.IsAssignableFrom(c2): {0}", c1.IsAssignableFrom(c2));
Type g1 = typeof(generic1<>);
Type g2 = typeof(generic2<>);
Console.WriteLine("g1.IsAssignableFrom(g2): {0}", g1.IsAssignableFrom(g2));
generic1<class1> cc = new generic2<class1>();
}
}
Run Code Online (Sandbox Code Playgroud)
那么如何在运行时确定一个泛型类型定义是否来自另一个?
如何在Doctrine 2中设置具有额外列的连接表,或与其他属性的多对多关联?
我遇到了一个断言HashSet <T> .Contains()是一个O(1)操作.这令我感到惊讶,因为我遇到的每次哈希讨论都提到了碰撞的可能性,可能导致O(n)运行时间.
好奇,我查看了HashSet <T> .Contains和HashTable.Contains的文档.两种方法的文档都提出了同样的主张.
当我查看反射器时,HashSet <T> .Contains()是用for循环实现的,它通过一个包含具有相同散列值的槽列表.
现在可以肯定的是,那些关于哈希的讨论也提到了一个好的哈希算法可以避免冲突,在这种情况下查找确实是O(1).但我对Big O符号的理解是,它是最糟糕的运行时间,而不是最好的.
O(1)声明是否错误?或者我错过了什么?
我正在尝试编写一个Linq查询,该查询返回一个对象数组,其构造函数中包含唯一值.对于整数类型,Distinct只返回每个值的一个副本,但是当我尝试创建对象列表时,事情就会崩溃.我怀疑这是我的类的相等运算符的问题,但是当我设置断点时,它从未被击中.
过滤掉子表达式中的重复int可以解决问题,并且还可以避免构造将立即丢弃的对象,但我很好奇为什么这个版本不起作用.
更新:晚上11:04 有几个人指出MyType不会覆盖GetHashCode().我担心这个例子过于简单了.原始的MyType确实实现了它.我在下面添加了它,仅修改为在返回它之前将哈希代码放入临时变量中.
通过调试器运行,我看到GetHashCode的所有五次调用都返回不同的值.由于MyType只继承自Object,因此可能与Object所表现的相同.
我是否正确,然后得出结论,哈希应该基于值的内容?这是我第一次尝试覆盖运营商,当时看起来GetHashCode似乎并不特别花哨.(这是我的第一次平等检查似乎没有正常工作.)
class Program
{
static void Main(string[] args)
{
int[] list = { 1, 3, 4, 4, 5 };
int[] list2 =
(from value in list
select value).Distinct().ToArray(); // One copy of each value.
MyType[] distinct =
(from value in list
select new MyType(value)).Distinct().ToArray(); // Two objects created with 4.
Array.ForEach(distinct, value => Console.WriteLine(value));
}
}
class MyType
{
public int Value { get; private set; }
public MyType(int arg)
{
Value = arg;
} …Run Code Online (Sandbox Code Playgroud) 我有一个相当简单的WCF Web服务,使用.Net 3.5在IIS Express中托管(最终是完整的IIS).服务方法相当无趣.
[ServiceContract]
public class MySvc
{
[OperationContract]
public Stuff MyMethod(string input)
{
Stuff result = DoSomething();
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
服务配置也相当通用:
<system.serviceModel>
<services>
<service behaviorConfiguration="MySvcBehavior" name="MySvc">
<endpoint address="" binding="wsHttpBinding" contract="MySvc">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MySvcBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
该服务由ASPX应用程序中的代码隐藏消耗.有一个服务参考,导致一些同样无趣的代码.
MySvcClient svc = new MySvcClient();
Stuff result = svc.MyMethod("foo");
Run Code Online (Sandbox Code Playgroud)
只要一次只有一个请求,一切正常,客户端代码就会得到预期的结果.好极了.
当我做一些非常原始的压力测试时,问题出现了.我在浏览器中加载客户端ASPX页面,然后按住F5键.观看IIS Express窗口,首先结果返回状态200,但几分钟后我开始看到状态500.此时,服务将仅响应状态500,直到我重新启动IIS Express.(基于等待大约10分钟.)
在客户端代码中设置断点,我看到完整的返回消息是"服务器上有太多待处理的安全对话.请稍后再试".
在服务器代码中设置断点,我发现我的代码甚至没有被调用.所以它在调用和我的代码的实际启动之间失败了.
我的在线搜索并不是很有希望,主要是为了覆盖maxPendingSessions属性而导致编写自定义绑定的相同建议,以及以"Someone告诉我有[未命名]配置文件设置"开头的线程然后导致一个破碎的链接声称微软承认这是一个错误.
关于maxPendingSessions属性的链接确实提到了128个连接的限制,超时为两分钟,我当然可以看到我的测试方法将中断某些连接.这是否是一种公认的不良测试方法的预期结果?或者可以在配置中做些什么来改善这个?
在C#中,类A包含一个公共方法Foo(),它执行一些处理并返回一个值. protected方法Bar(),也在类中A执行相同的逻辑Foo(),然后进行一些额外的处理,然后返回一个值.
为了避免重复代码,Bar()调用Foo()并使用return作为中间值.
class A
{
public virtual String Foo()
{
String computedValue;
// Compute the value.
return computedValue;
}
protected String Bar()
{
String computedValue;
String intermediateValue = Foo();
/// More processing to create computedValue from intermediateValue.
return computedValue;
}
}
Run Code Online (Sandbox Code Playgroud)
类B继承A和覆盖Foo().覆盖调用的基类实现Bar().
class B : A
{
public override String Foo()
{
base.Bar();
}
}
Run Code Online (Sandbox Code Playgroud)
这(当然)进入无限循环,直到计算机内存不足然后产生堆栈溢出异常. …
我试图在两个活动之间传递自定义对象的数组列表抛出意图,但我得到了这个错误,我不知道如何解决它.如果有人能帮助我,我将不胜感激!提前致谢.
传递第1个活动的方法:
i.putParcelableArrayListExtra("key", (ArrayList<? extends Parcelable>) result);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)
进入第2个活动的方法:
Intent i = getIntent();
ArrayList<ItemObjects> list = i.getParcelableArrayListExtra("key");
Run Code Online (Sandbox Code Playgroud)
错误日志:
12-25 09:11:49.546 17742-17742/com.example.baha.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.baha.myapplication, PID: 17742
java.lang.RuntimeException: Failure from system
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1514)
at android.app.Activity.startActivityForResult(Activity.java:3917)
at android.app.Activity.startActivityForResult(Activity.java:3877)
at android.app.Activity.startActivity(Activity.java:4200)
at android.app.Activity.startActivity(Activity.java:4168)
at com.example.baha.myapplication.splash$GetMarkets.onPostExecute(splash.java:127)
at com.example.baha.myapplication.splash$GetMarkets.onPostExecute(splash.java:62)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.-wrap1(AsyncTask.java)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.os.TransactionTooLargeException: data parcel size 12404332 bytes
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:503)
at …Run Code Online (Sandbox Code Playgroud) 我有一些变量,我想传递给我的下一个活动,但我无法想办法做到这一点.
我的变量是:
JSONObject jsonObj = jsonArray.getJSONObject(i);
String propId = jsonObj.getString("id");
Log.i("Value id", propId);
String propCity = jsonObj.getString("city");
Log.i("Value city", propCity);
String propPlace = jsonObj.getString("place");
Log.i("Value place", propPlace);
String propStation = jsonObj.getString("station");
Log.i("Value station", propStation);
Run Code Online (Sandbox Code Playgroud)
我用来获取它们的代码是:
Bundle extras = new Bundle();
extras.putString("id", propId);
extras.putString("city", propCity);
extras.putString("place", propPlace);
extras.putString("station", propStation);
Run Code Online (Sandbox Code Playgroud)
有人可以帮我这个吗?
我有一个简单的PowerShell功能
function Foo($a, $b){
'$a = ' + $a
'$b = ' + $b
}
Run Code Online (Sandbox Code Playgroud)
我通过电话调用它
Foo("dogs", "cat");
Run Code Online (Sandbox Code Playgroud)
到目前为止我读到的所有内容都表明预期的输出是
$a = dogs
$b = cats
Run Code Online (Sandbox Code Playgroud)
我实际看到的是:
$a = dogs cat
$b =
Run Code Online (Sandbox Code Playgroud)
如果我将我的功能重写为:
function Foo($a, $b){
'$a is ' + $a.GetType().Name;
'$b = ' + $b.GetType().Name;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
$a is Object[]
You cannot call a method on a null-valued expression.
At C:\WCMTeam\Percussion\Notifier\foo.ps1:4 char:7
+ '$b = ' + $b.GetType().Name;
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
android ×2
arraylist ×1
doctrine-orm ×1
generics ×1
hash ×1
java ×1
jointable ×1
linq ×1
many-to-many ×1
polymorphism ×1
powershell ×1
properties ×1
reflection ×1
types ×1
variables ×1
wcf ×1