小编Hot*_*otN的帖子

'is'与使用null check的try cast相比

我注意到Resharper建议我转过身:

if (myObj.myProp is MyType)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

进入这个:

var myObjRef = myObj.myProp as MyType;
if (myObjRef != null)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

为什么会建议这种变化?我已经习惯了Resharper建议优化更改和代码减少更改,但这感觉就像它想要我的单一陈述并将其转换为双线程.

根据MSDN:

一个 表达式如果两个满足以下条件的值为true:

表达式不为空.表达式可以转换为类型.也就是说,表单的强制转换表达式将在(type)(expression)不抛出异常的情况下完成.

我是否误读了,或者没有is完全相同的检查,只需要在一行中而不需要为空检查显式创建另一个局部变量?

.net c# resharper casting

102
推荐指数
3
解决办法
4万
查看次数

使用awesomium从c#调用Javascript

我正在尝试使用awesomium来创建一个基本的应用程序,我正在测试js <----> c#通信,但这似乎不能正常工作......我创建了一个本地html并打开它..这么好..但是,当我尝试调用js没有任何事情发生,没有错误,没有错误,没有,只是这不会调用js ..

我的基本js代码是:

 var base = {

    newItem : function(item){
    $("#botones").append('<div class="botonMenu">' + item + '</div>');
  },

  other : function(){
      alert("hi!!");
  }

  }
Run Code Online (Sandbox Code Playgroud)

如果我在firebug中测试这个,显然我可以很好地调用我的功能并创建项目或警告框...

now..my c#代码就是这个

//I've wrote this code inside the winForms sample..but change the code for load
//my local file and call js....


WebCore.BaseDirectory = @"C:\Documents and Settings\ME\dummytests\codes\views";
webView.LoadFile("base.html");


JSValue param1 = new JSValue("nameItem");
webView.CallJavascriptFunction("base", "other");
webView.CallJavascriptFunction("base","newItem", param1);
webView.Focus();
Run Code Online (Sandbox Code Playgroud)

这个文件负载很好,但是js通信不起作用,非常感谢,我希望可以帮助我...这个awesomium真的很棒

c# awesomium

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

停止为不存在的控制器抛出异常

好的,所以我对这个问题很难过.我已经看到很多应该解决这个问题的事情,但是我没有得到满足我要求的解决方案.

我正在使用ELMAH来记录异常,并且当具有无效控制器的URL或适当的控制器和无效操作时,我会收到此异常.

System.Web.HttpException: The controller for path '/BadController' was not found or does not implement IController.
   at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
   at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
   at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Run Code Online (Sandbox Code Playgroud)

我想阻止这个异常被抛出.我正在使用自定义错误,它们工作正常,因为应用程序将发送到我的自定义404错误页面.但是,异常仍会被记录.

我有[HandleError]属性装饰所有控制器.这可能吗?如果是这样,我将不胜感激任何帮助.

我已经尝试过,设置一个重定向最终路由,但无论出于何种原因,它都匹配之前的路由.我试图使用httpModule,并在文件的情况Application_Error下清除Global.asax.没有什么能阻止这种例外.

再次感谢任何帮助!

.net httpexception asp.net-mvc-2

9
推荐指数
1
解决办法
2185
查看次数

安装后的程序集依赖关系更改

我有一个.NET应用程序似乎有一些依赖版本在调试和作为安装的发布应用程序运行之间发生变化.我将专注于Castle.Core汇编以获取我的详细信息,但同样的问题也会出现在其他几个问题上.我正在使用的NuGet包需要Castle.Core作为依赖项(我的问题的所有情况都与源自NuGet的程序集有关,以防它重要).

在Visual Studio中,当我使用Castle.Core依赖项安装NuGet包时,一切都运行得很好,包括Debug和Release配置.我可以看到Castle.Core项目引用是引用版本3.3.0.0.但是,当我使用InstallShield打包Release配置生成的所有内容并安装应用程序(所有程序集都位于同一程序目录中)时,我收到此运行时错误:

无法加载文件或程序集'Castle.Core,Version = 3.2.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

NuGet包将其对Castle.Core的依赖性列为(≥3.2.0.0&& <4.0.0.0).3.2.0.0和3.3.0.0都满足这些条件.

如果我手动将Castle.Core降级到3.2.0.0,我的项目参考显示它确实降级了.但是当我在Visual Studio中运行该项目时,我得到:

无法加载文件或程序集'Castle.Core,Version = 3.3.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

内部例外:

无法加载文件或程序集'Castle.Core,Version = 3.2.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

但是,如果我将其打包到安装程序并将其作为已安装的应用程序启动,则可以正常运行.

对我来说,感觉就像将程序集打包到安装程序中会导致依赖版本发生变化.我无法想象会出现这种情况,但我无法提出更好的解释.

任何人都可以解释这里发生了什么,以及我如何解决它?

.net installer dependencies .net-assembly visual-studio

8
推荐指数
1
解决办法
8144
查看次数

使用Office互操作获取特定的窗口句柄

我正在使用Office互操作创建一个新的Word实例:

var word = Microsoft.Office.Interop.Word.Application();
word.Visible = true;
word.Activate;
Run Code Online (Sandbox Code Playgroud)

我可以像这样得到一个窗口句柄:

var wordHandle = Process.GetProcessesByName("winword")[0].MainWindowHandle;
Run Code Online (Sandbox Code Playgroud)

问题是代码的工作原理是假设没有其他Word运行实例.如果有多个,则无法保证它返回的句柄是针对我已启动的实例.我GetForegroundWindow在检测WindowActivate到来自我的对象的事件之后尝试使用但是这一切都在WPF应用程序中运行,该应用程序被设置为作为最顶层的窗口运行,所以我只获得了WPF窗口的句柄.有没有其他方法来获取我的单词实例的句柄?

.net window-handles office-interop

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

XML序列化导致重复的节点

我有一个对象结构,我正在尝试序列化为xml,导致重复的节点级别.我很确定它与子类化有关,因为我必须实现自己的反序列化,但我不确定在另一个方向上究竟发生了什么.在应用程序启动时反序列化我的数据时,将相同的xml结构用作输入,就像将其重新序列化以便稍后保存一样.

这是错误输出xml的样子:

<Keyboarding xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Exercises>
    <Exercise>
      <Exercise Id="3" ActivityNumber="5" SubActivityNumber="b" Type="Standard">
        <Title>Test Title</Title>
        <Instructions>Downloaded Update Instructions</Instructions>
      </Exercise>
    </Exercise>
  </Exercises>
</Keyboarding>
Run Code Online (Sandbox Code Playgroud)

这是它应该是什么样子(并且在初始反序列化时看起来像):

<Keyboarding xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Exercises>
      <Exercise Id="3" ActivityNumber="5" SubActivityNumber="b" Type="Standard">
        <Title>Test Title</Title>
        <Instructions>Downloaded Update Instructions</Instructions>
      </Exercise>
  </Exercises>
</Keyboarding>
Run Code Online (Sandbox Code Playgroud)

根对象包含一组练习.Exercise是我的基类,而子类由Type属性决定.我正在使用自定义xml序列化程序来构建来自Exercise的各种派生类型的对象,因为它允许我使用反射来匹配2个左右的潜在派生类型中的任何一个,这些类型在首次读入时处于未知的顺序和数量通过我的申请.

这是使用自定义xml序列化程序的根元素集合:

[XmlArray("Exercises")]
[XmlArrayItem("Exercise", Type = typeof (ExerciseXmlSerializer<Exercise>))]
public Collection<Exercise> UnprocessedExercises { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的基础练习课声明如下:

[Serializable]
[XmlType(AnonymousType = true)]
public class Exercise
Run Code Online (Sandbox Code Playgroud)

我的派生类声明如下:

[Serializable]
[XmlType(AnonymousType = true)]
[XmlRoot(ElementName = "Exercise", IsNullable = false)]
public class StandardExercise : Exercise
Run Code Online (Sandbox Code Playgroud)

这是我的自定义xml序列化程序的编写器部分:

public …
Run Code Online (Sandbox Code Playgroud)

.net c# xml-serialization

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

在更新状态时更新递归过多

在此示例中,当我尝试在componentDidUpdate生命周期回调期间更新状态时,出现too much recursion错误.我应该如何更新州?

import React from 'react';

class NotesContainer extends React.Component {
  constructor(props) {
    super(props);
    this.state = { listOfShoppingItems: [] };
  }

  componentDidUpdate(nextProps, nextState) {
    let newShoppingItems = this.calculateShoppingItems();
    this.setState({ listOfShoppingItems: newShoppingItems });
  }

  calculateShoppingItems() {
    let shoppingItemsCart = []

    if (this.props.milk < 3) {
      let value = "Buy some milk";
      shoppingItemsCart.push(value);
    }

    if (this.props.bread < 2) {
      let value = "Buy some bread";
      shoppingItemsCart.push(value);
    }

    if (this.props.fruit < 10) {
      let value = "Buy some …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

滚动时会重复ArrayAdapter自定义视图状态

我有一个ListView,其中填充了自定义视图项.自定义视图由图标,标签和复选框组成.当我第一次创建列表时,一切都按原样显示.如果我向下滚动列表,图标和标签继续在列表的下方继续正确,但复选框状态开始混淆,显示除我选择的项目之外的其他项目.

示例:我的列表开头没有设置为已选中任何项目的复选框.我在屏幕上看到10个项目.我切换了第10项的复选框.它会适当更新.如果我向下滚动列表,我会发现项目20,项目30等的复选框从已经切换的复选框开始,即使它们从未可见以进行交互.如果我反复滚动,则会检查越来越多的不可识别图案中的项目.

在我的活动中列出设置:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.default_list);

        profile = (Profile) i.getParcelableExtra("profile");

        ArrayList<Application> apps = new ApplicationListRetriever(this).getApplications(true);

        adapter = new ApplicationsAdapter(this, R.layout.application_list_item, apps, getPackageManager(), profile);
        setListAdapter(adapter);        
    }
Run Code Online (Sandbox Code Playgroud)

ApplicationsAdapter:

public class ApplicationsAdapter extends ArrayAdapter<Application> {
    private ArrayList<Application> items;
    private PackageManager pm;
    private Profile profile;

    private ArrayList<ApplicationListener> listeners = new ArrayList<ApplicationListener>();

    public ApplicationsAdapter(Context context, int textViewResourceId,
            ArrayList<Application> objects, PackageManager pm, Profile profile) {
        super(context, textViewResourceId, objects);

        this.pm = pm;
        items = objects;
        this.profile = profile;
    }

    @Override
    public View …
Run Code Online (Sandbox Code Playgroud)

android

4
推荐指数
1
解决办法
2029
查看次数

在Visual Studio调试期间从哪里加载user.config

我有一个从用户设置文件读取的应用程序,该文件通常存储在Users / {username} / AppData / Local / {publisher} / {app} / {version} /user.config中。我想测试直接对文件进行更改,而不是通过Visual Studio属性编辑器进行更改。

我找到了另一个问题的答案,该问题指向应用程序应该从何处加载文件,但是当我在Visual Studio中的调试会话期间进行检查时,似乎不存在该问题。

例如,当我在断点处停止时在“立即”窗口中运行以下命令时,它找不到文件。

System.IO.File.Exists(System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath) //returns false
Run Code Online (Sandbox Code Playgroud)

我想在调试过程中找到此文件的原因是,我收到了有关配置文件已损坏并使生产中的应用程序崩溃的报告。我确定可以将文件恢复为默认状态,但实际上我想在调试环境中重现该问题。

如何找到Visual Studio加载的设置文件?

c# wpf user-config

4
推荐指数
1
解决办法
2467
查看次数

检查调用和未调用时 Mockk 验证失败

我正在尝试使用以下命令验证是否未调用函数:

verify {
    managementService.deleteUser(any()) wasNot Called
}
Run Code Online (Sandbox Code Playgroud)

该验证失败并显示以下消息:

验证失败:第 1 个调用(共 1 个):未调用 ManagementService(#11).deleteUser(any()))。

如果我将验证反转为:

verify {
    managementService.deleteUser(any())
}
Run Code Online (Sandbox Code Playgroud)

我仍然收到相同的失败消息。

ManagementService该通道上还有其他功能wasNot Called也很好。

为什么我的验证会失败wasNot Called,而错误消息显示失败是因为未调用它?为什么反转支票会产生相同的错误?

testing kotlin mockk kotest

4
推荐指数
1
解决办法
1351
查看次数