小编Kei*_*ith的帖子

使用此(基于扩展方法)速记的可能陷阱

C#6更新

C#6 ?.中现在是一种语言功能:

// C#1-5
propertyValue1 = myObject != null ? myObject.StringProperty : null; 

// C#6
propertyValue1 = myObject?.StringProperty;
Run Code Online (Sandbox Code Playgroud)

下面的问题仍适用于旧版本,但如果使用new ?.运算符开发新应用程序则更好.

原始问题:

我经常想要访问可能为null的对象的属性:

string propertyValue1 = null;
if( myObject1 != null )
    propertyValue1 = myObject1.StringProperty;

int propertyValue2 = 0;
if( myObject2 != null )
    propertyValue2 = myObject2.IntProperty;
Run Code Online (Sandbox Code Playgroud)

等等...

我经常使用它,因此我有一个代码片段.

如果符合以下条件,您可以在某种程度上缩短此内容:

propertyValue1 = myObject != null ? myObject.StringProperty : null;
Run Code Online (Sandbox Code Playgroud)

然而,这有点笨拙,特别是如果设置大量属性或多个级别可以为null,例如:

propertyValue1 = myObject != null ? 
    (myObject.ObjectProp != null ? myObject.ObjectProp.StringProperty) : null : null;
Run Code Online (Sandbox Code Playgroud)

我真正想要的是 …

c# extension-methods .net-3.5

15
推荐指数
5
解决办法
4566
查看次数

将TypeScript与内联服务器端`<script>`块和ASP.Net一起使用

我希望能够在ASPX(或Razor)页面中使用内联TypeScript,该页面在页面编译时转换为Javascript.

所以:

<script type="text/typescript" runat="server">
    ...
</script>
Run Code Online (Sandbox Code Playgroud)

成为...

<script type="text/javascript">
    ...
</script>
Run Code Online (Sandbox Code Playgroud)

它应该发生在@<% %>转换块的同一点上.

这应该可以在运行时使用某种页面后处理,但是在编译时不会产生异常 - 我想在脚本中找到与任何C#代码同时出现的错误.

理想情况下,TypeScript intellisense等应该<script>在内联块中工作,这使我认为这应该是VS2012扩展.

有没有办法做到这一点?

c# asp.net server-side typescript

15
推荐指数
1
解决办法
3202
查看次数

使WCF更易于配置

我有一组由桌面应用程序动态连接的WCF Web服务.

我的问题是WCF需要工作的非常详细的配置设置.让SSL工作涉及自定义设置.让MTOM或其他任何东西工作需要更多.你想要压缩吗?再来一次...

WCF非常强大 - 您可以使用许多不同的方式进行连接,但似乎都涉及大量详细的配置.如果主机和客户端不完全匹配,则很难解密错误.

我想让桌面应用程序更容易配置 - 理想情况下是某种自动发现.桌面应用程序的用户应该只能输入URL,然后完成剩下的工作.

有谁知道这样做的好方法?

我知道Visual Studio可以为您设置配置,但我希望桌面应用程序能够基于各种不同的服务器设置来完成.

我知道VS的工具可以在外部使用,但我正在寻找桌面应用程序的用户,而不必是WCF专家.我知道MS故意使这个过于复杂.

有没有办法,机制,第三方库或任何可以自动发现WCF设置的东西?

.net configuration wcf

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

如何将manifest.json的start_url设置为站点的根目录?

我有一个manifest.json,它有一个start_url属性,我想指向我的单页面应用程序的第一个文件.

这是index.html,它是网站的根源.我希望这是start_url,但该文件永远不会被要求作为URL.

我如何指向start_url网站的相对根?

例如,假设该网站是在https://example.com什么应的值start_urlhttps://example.com/manifest.json?我希望PWA从而开始https://example.com不是 https://example.com/index.html.PWA可能放在不同的域上,因此start_url需要是相对的,而不是绝对的.

javascript progressive-web-apps manifest.json

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

在C#中使用多线程加速循环(问题)

想象一下,我有一个功能,它通过一百万个/十亿字符串并检查其中的smth.

f.ex:

foreach (String item in ListOfStrings)
{
    result.add(CalculateSmth(item));
}
Run Code Online (Sandbox Code Playgroud)

它消耗了大量的时间,因为CalculateSmth是非常耗时的功能.

我想问一下:如何在这种过程中集成多线程?

f.ex:我想启动5个线程,每个线程返回一些结果,直到列表中有项目为止.

也许任何人都可以展示一些例子或文章..

忘记提到我需要它在.NET 2.0中

c# multithreading .net-2.0

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

IE7和8不会为表中附加的元素触发jQuery单击事件

我有一个IE错误,我不知道如何解决.

使用jQuery我动态移动菜单以在鼠标悬停时出现在元素上.

我的代码(简化)看起来像这样:

$j = jQuery.noConflict();

$j(document).ready(function()
{
    //do something on the menu clicks
    $j('div.ico').click(function() { alert($j(this).parent().html()); });

    setUpActions('#tableId', '#menuId');
});

//on mouseover set up the actions menu to appear on mouseover
function setUpActions(tableSelector, menuSelector)
{
    $j(tableSelector + ' div.test').mouseover(function()
    {
        //note that append will move the underlying
        //DOM element with all events from it's old
        //parent to the end of this one.
        $j(this).append($j(menuSelector).show());
    });
}
Run Code Online (Sandbox Code Playgroud)

在IE7,IE8和IE8-as-IE7中移动后,此菜单似乎没有为菜单正确注册事件(是的MS,这在IE8中真的是一个'新的渲染引擎',我们都相信你).

它在其他一切方面都有预期效果.

您可以在此处查看基本演示中的行为.

在演示中,您可以看到两个问题示例:

  1. 按钮后面的图像应在悬停时更改(使用CSS:hover选择器完成).它适用于第一次鼠标悬停但仍然存在.
  2. 点击事件不会触发 - 但是使用开发工具,您可以手动调用它并仍然订阅它.

你可以在IE8的开发工具中看到(2):

  1. 在IE8中打开 …

css jquery internet-explorer-8 internet-explorer-7

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

表值参数性能的问题

我不知道这是否是我使用它们或Microsoft的实现的问题,但SQL 2008表值参数非常缓慢.

一般来说,如果我需要使用TVP,那是因为我有很多记录 - 目前它们似乎比最少的记录速度慢得多.

我在.Net中调用它们是这样的:

// get the data
DataTable data = GetData();

com.CommandText = "sprocName"

// create the table-value parameter
var tvp = com.Parameters.AddWithValue("data", data);
tvp.SqlDbType = SqlDbType.Structured;

com.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

我运行探查器来查看原因,实际的SQL语句是这样的:

declare @data table ...

insert into @data ( ... fields ... ) values ( ... values ... )
-- for each row
insert into @data ( ... fields ... ) values ( ... values ... )

sprocName(@data)
Run Code Online (Sandbox Code Playgroud)

尽管如此,这是一个非常缓慢的方法.如果这样做会更快:

insert into @data ( ... fields ... ) 
values ( …
Run Code Online (Sandbox Code Playgroud)

.net sql-server performance sql-server-2008 table-valued-parameters

13
推荐指数
2
解决办法
5208
查看次数

mscorlib.XmlSerializers.DLL的FileNotFoundException,它不存在

我正在使用XmlSerializer来反序列化mscorelib.dll中的特定类型

XmlSerializer ser = new XmlSerializer( typeof( [.Net type in System] ) );
return ([.Net type in System]) ser.Deserialize( new StringReader( xmlValue ) );
Run Code Online (Sandbox Code Playgroud)

这会FileNotFoundException在加载程序集时抛出一个catch :

"无法加载文件或程序集'mscorlib.XmlSerializers,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其中一个依赖项.系统找不到指定的文件."

FusionLog:

=== Pre-bind state information ===
LOG: User = ###
LOG: DisplayName = mscorlib.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
 (Fully-specified)
LOG: Appbase = file:///C:/localdir
LOG: Initial PrivatePath = NULL
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: …
Run Code Online (Sandbox Code Playgroud)

.net c# serialization assemblies

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

什么是用于网站图标/优惠的最佳html链接语法?

我应该使用哪个:

<link rel="SHORTCUT ICON" type="image/x-icon" href="favicon.ico" /> 
Run Code Online (Sandbox Code Playgroud)

要么:

<link rel="icon" type="image/ico" href="favicon.ico" />
Run Code Online (Sandbox Code Playgroud)

我已经看到两者都在使用,并且都在许多当前的浏览器中工作 - 但大多数浏览器更一致地支持它?

html favicon cross-browser hyperlink

12
推荐指数
1
解决办法
8973
查看次数

如何使TypeScript输出有效的ES6模块导入语句?

一段时间以来,所有主流浏览器都支持ES6模块.

这些与许多服务器端方法的不同之处在于,它们需要指定要导入的确切文件 - 它们不能使用文件发现.

这是有道理的 - 在Node应用程序或像WebPack这样的捆绑器中,它们只需要模块的名称,然后可以花费一些额外的时间来发现保存代码的特定文件.在网络上,可能是白白浪费了很多往返的(是'library'library/index.js,还是 library/library.js,还是library.jsrequire()不关心,但在网络上,我们必须).

打字稿有ES6模块的支持(设置"module": "es6"tsconfig.json),但它似乎是使用文件发现方法...

假设我有library.ts:

export function myFunction(...) {  ... }
Run Code Online (Sandbox Code Playgroud)

然后在app.ts:

import {myFunction} from './library';
var x = myFunction(...);
Run Code Online (Sandbox Code Playgroud)

但是,在转换时这没有改变 - TS输出仍然具有'library'文件发现的名称,这不起作用.这会抛出错误,因为'library'找不到:

<script type="module" src="app.js"></script>
Run Code Online (Sandbox Code Playgroud)

为了使ES6模块工作,TS输出需要引用特定文件:

import {myFunction} from './library.js';
var x = myFunction(...);
Run Code Online (Sandbox Code Playgroud)

如何使TS输出有效的ES6模块import语句?

注意:我不是问如何使捆绑器将TS输出连接到单个文件中.我特别想要使用单独加载这些文件<script type="module">

javascript typescript es6-modules

12
推荐指数
1
解决办法
2940
查看次数