小编pal*_*wim的帖子

使用Reflection调用方法时处理null参数

我正在尝试编写将从参数列表中推断出类型的代码,然后调用与这些参数匹配的方法.这非常有效,除非参数列表中包含null值.

我想知道如何使Type.GetMethod调用匹配函数/重载,即使null参数列表中的参数.

object CallMethodReflection(object o, string nameMethod, params object[] args)
{
    try
    {
        var types = TypesFromObjects(args);
        var theMethod = o.GetType().GetMethod(nameMethod, types);
        return (theMethod == null) ? null : theMethod.Invoke(o, args);
    }
    catch (Exception ex)
    {
        return null;
    }
}
Type[] TypesFromObjects(params object[] pParams)
{
    var types = new List<Type>();
    foreach (var param in pParams)
    {
        types.Add((param == null) ? null : param.GetType());
    }
    return types.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

主要问题是types.Add((param == null) ? null : …

c# reflection null

8
推荐指数
2
解决办法
3837
查看次数

Visual Studio滚动条中的灰色标记表示什么?

Visual Studio 2013在垂直滚动条中添加了颜色指示器,并在介绍页面中提供了一些有用的图例。并且,该网站上的其他问题也询问了颜色的一般含义,以及特定的,不太常见的颜色。但是,升级到Visual Studio 2017后,现在我在滚动条上看到了新的灰色标记,并且很难确定它们的模式和重要性。

带有未知标记的Visual Studio垂直滚动条

我知道红色标记表示错误,黄色标记表示已更改,而较深的灰色标记表示滚动位置。那些较浅的灰色标记与类,属性或我所知的其他内容不符。

visual-studio visual-studio-2017

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

允许HTTP iFrame在HTTPS父框架上调用JavaScript

我有一个https页面(https://example.com/main.php),其中包含一个非https源的iframe(http://example.com/inner.php).两个文件都在同一台服务器上 - 只有一个用https访问而另一个不是.我需要非https页面才能main.php使用代码等在https 页面上执行javascriptparent.myfunction()

但是,当我尝试这个时,我收到以下错误:

不安全的JavaScript尝试使用网址http://example.com/inner.php从网址https://example.com/main.php访问框架.域,协议和端口必须匹配.

我已经设置document.domain = 'example.com'了两个文件,我认为这将解决它,但是,它没有.有没有办法允许框架在父框架上执行javascripts,反之亦然?如果是这样,这有什么安全隐患?

PS:对于那些建议只对两个页面使用https或http的人,我正在调查.但是,由于iframe页面中发生的进程,由于服务器负载问题,这可能不是一个可行的选项.

javascript dns xss https iframe

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

我不太了解使用/ Disposable对象的工作原理

我问了一个关于从函数中返回一个Disposable(IDisposable)对象的问题,但是如果我在那里提出这个问题,我认为我会讨论这个问题.

我创建了一些示例代码:

class UsingTest
{
    public class Disposable : IDisposable
    {
        public void Dispose()
        {
            var i = 0;
            i++;
        }
    }
    public static Disposable GetDisposable(bool error)
    {
        var obj = new Disposable();
        if (error)
            throw new Exception("Error!");
        return obj;
    }
}
Run Code Online (Sandbox Code Playgroud)

我故意用这种方式编码,因为我打电话给:

using (var tmp = UsingTest.GetDisposable(true)) { }
Run Code Online (Sandbox Code Playgroud)

使用调试器,我注意到该Dispose方法永远不会执行,即使我们已经实例化了一个Disposable对象.如果我正确地理解了这个目的Dispose,如果这个类实际上已经打开了句柄之类的东西,那么我们一旦完成它们就不会关闭它们.

我问这个问题是因为这种行为符合我的期望,但在相关问题的答案中,人们似乎表明using会照顾一切.

如果using仍然以某种方式处理所有这些,有人可以解释我错过了什么?但是,如果这段代码确实会导致资源泄漏,你会如何建议我编写代码GetDisposable(条件是我必须实例化IDisposable对象并运行可能在return语句之前抛出异常的代码)?

c# idisposable using-statement

6
推荐指数
2
解决办法
854
查看次数

如何从DirectoryEntry和DN中检索DirectoryEntry

我有一个DirectoryEntry代表用户的对象.从DirectoryEntry.Properties集合中,我正在检索"manager"属性,它将为用户的经理提供一个专有名称("DN")值.

我可以DirectoryEntry从这两个对象中检索管理器的对象吗?如果是这样,怎么样?

我想象的东西DirectoryEntry.GetEntryFromDN(dnManager);,但我找不到类似的电话.

为了澄清,DirectoryEntry和DN是我拥有的唯一信息.我不能实例化一个新的DirectoryEntry因为那时我将不得不使用默认目录和凭据或具有目录名称/端口和用户名/密码.

.net c# ldap active-directory

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

Visual Studio 2012:脚本诊断权限

我无法在任何地方找到这个在线的描述.当我尝试运行和调试ASP.NET MVC3项目时,我从Visual Studio 2012 Pro收到此提示.我想知道:

  1. 它正在谈论的这些"脚本诊断"是什么?
  2. 将要进行哪些权限更改?是修改我的项目目录还是可视工作室安装目录?在我知道它在做什么以及它在做什么之前,我不想'确定'.

脚本诊断权限

visual-studio visual-studio-debugging asp.net-mvc-3 visual-studio-2012

6
推荐指数
0
解决办法
532
查看次数

带有闭包的JavaScript范围:帮助我理解

运行以下代码:

for (var i=0; i<3; i++) { 
   setTimeout( function() { console.log(i); } , 500 ); 
}
Run Code Online (Sandbox Code Playgroud)

输出"3"三次.它输出的是最终值,i而不是i创建内部函数时的值.

如果我想输出为1,2和3,我该如何编写这段代码?如何使用i函数定义时的值而不是最终值?

javascript closures scope

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

是一个If分支什么都不做代码味道或良好实践?

我已经回复了这里的线程(或者至少评论过)包含这样的代码的答案,但我想知道编写一系列if分支是否好或坏的形式,其中一个(或多个)分支在其中不执行任何操作,通常是为了消除null每个分支的检查.

一个例子(C#代码):

if (str == null) { /* Do nothing */ }
else if (str == "SomeSpecialValue")
{
    // ...
}
else if (str.Length > 1)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

代替:

if (str != null && str == "SomeSpecialValue")
{
    // ...
}
else if (str != null && str.Length > 1)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

当然,这只是一个例子,因为我倾向于使用更大更复杂的类.在大多数情况下,一个null值表示什么都不做.

对我来说,这可以减少我的代码的复杂性,并在我看到它时有意义.那么,这是好还是坏的形式(代码味道,甚至)?

complexity-theory conditional

5
推荐指数
3
解决办法
958
查看次数

在不使用变量名的情况下打印嵌套的JSON

Web服务返回以下嵌套的json对象:

{"age":"21-24","gender":"Male","location":"San Francisco, CA","influencer score":"70-79","interests":{"Entertainment":{"Celebrities":{"Megan Fox":{},"Michael Jackson":{}},},"Social Networks & Online Communities":{"Web Personalization": {},"Journals & Personal Sites": {},},"Sports":{"Basketball":{}},},"education":"Completed Graduate School","occupation":"Professional/Technical","children":"No","household_income":"75k-100k","marital_status":"Single","home_owner_status":"Rent"}
Run Code Online (Sandbox Code Playgroud)

我只是想在不指定属性名称的情况下遍历此对象,我尝试了以下代码:

for (var data in json_data) {
    alert("Key:" + data + " Values:" + json_data[data]);
}
Run Code Online (Sandbox Code Playgroud)

但是如果它是一个嵌套值,它会将值打印为[object Object],是否有任何方法可以更深入地迭代嵌套值?

javascript json

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

如何创建空(0x0)图像?

我试图想出一种方法来创建一个零宽度,零高度的图像,它符合任何格式的标准.

我已经尝试过Windows位图(BMP)格式(仅限54字节的标题文件),但似乎图像阅读器不接受它.

理论上0x0-BMP字节串:

424D360000000000000036000000280000000000000000000000010020000000000000000000C40E0000C40E00000000000000000000
Run Code Online (Sandbox Code Playgroud)

哪种格式支持这种格式,我可以使用哪些工具来创建它?甚至编程解决方案也足够了(例如C#System.Drawing脚本).

bit-manipulation image image-formats

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