小编Tha*_*Guy的帖子

将IsAssignableFrom与'open'泛型类型一起使用

使用反射,我试图找到从给定基类继承的类型集.花了很长时间才弄清楚简单的类型,但是当涉及到泛型时我很难过.

对于这段代码,第一个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)

那么如何在运行时确定一个泛型类型定义是否来自另一个?

c# generics reflection types

57
推荐指数
2
解决办法
2万
查看次数

学说2:如何处理具有额外列的连接表

如何在Doctrine 2中设置具有额外列的连接表,或与其他属性的多对多关联?

many-to-many properties jointable doctrine-orm

21
推荐指数
1
解决办法
2万
查看次数

O(1)哈希查找?

我遇到了一个断言HashSet <T> .Contains()是一个O(1)操作.这令我感到惊讶,因为我遇到的每次哈希讨论都提到了碰撞的可能性,可能导致O(n)运行时间.

好奇,我查看了HashSet <T> .Contains和HashTable.Contains的文档.两种方法的文档都提出了同样的主张.

当我查看反射器时,HashSet <T> .Contains()是用for循环实现的,它通过一个包含具有相同散列值的槽列表.

现在可以肯定的是,那些关于哈希的讨论也提到了一个好的哈希算法可以避免冲突,在这种情况下查找确实是O(1).但我对Big O符号的理解是,它是最糟糕的运行时间,而不是最好的.

O(1)声明是否错误?或者我错过了什么?

.net c# hash

15
推荐指数
4
解决办法
1444
查看次数

Distinct()返回具有用户定义类型的重复项

我正在尝试编写一个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)

c# linq

7
推荐指数
1
解决办法
1651
查看次数

服务器500:待处理的安全对话太多

我有一个相当简单的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个连接的限制,超时为两分钟,我当然可以看到我的测试方法将中断某些连接.这是否是一种公认​​的不良测试方法的预期结果?或者可以在配置中做些什么来改善这个?

.net c# wcf

7
推荐指数
1
解决办法
2903
查看次数

调用基本方法而不是覆盖

在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)

这(当然)进入无限循环,直到计算机内存不足然后产生堆栈溢出异常. …

c# polymorphism

5
推荐指数
1
解决办法
1526
查看次数

我不能在两个活动之间传递太大的对象arraylist?

我试图在两个活动之间传递自定义对象的数组列表抛出意图,但我得到了这个错误,我不知道如何解决它.如果有人能帮助我,我将不胜感激!提前致谢.

传递第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)

java android arraylist android-intent

5
推荐指数
2
解决办法
2986
查看次数

使用putExtra传递多个变量

我有一些变量,我想传递给我的下一个活动,但我无法想办法做到这一点.

我的变量是:

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)

有人可以帮我这个吗?

variables android android-activity

3
推荐指数
1
解决办法
2万
查看次数

函数参数成为一个数组

我有一个简单的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)

powershell

0
推荐指数
1
解决办法
179
查看次数