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)
我真正想要的是 …
我希望能够在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扩展.
有没有办法做到这一点?
我有一组由桌面应用程序动态连接的WCF Web服务.
我的问题是WCF需要工作的非常详细的配置设置.让SSL工作涉及自定义设置.让MTOM或其他任何东西工作需要更多.你想要压缩吗?再来一次...
WCF非常强大 - 您可以使用许多不同的方式进行连接,但似乎都涉及大量详细的配置.如果主机和客户端不完全匹配,则很难解密错误.
我想让桌面应用程序更容易配置 - 理想情况下是某种自动发现.桌面应用程序的用户应该只能输入URL,然后完成剩下的工作.
有谁知道这样做的好方法?
我知道Visual Studio可以为您设置配置,但我希望桌面应用程序能够基于各种不同的服务器设置来完成.
我知道VS的工具可以在外部使用,但我正在寻找桌面应用程序的用户,而不必是WCF专家.我知道MS故意使这个过于复杂.
有没有办法,机制,第三方库或任何可以自动发现WCF设置的东西?
我有一个manifest.json,它有一个start_url属性,我想指向我的单页面应用程序的第一个文件.
这是index.html,它是网站的根源.我希望这是start_url,但该文件永远不会被要求作为URL.
我如何指向start_url网站的相对根?
例如,假设该网站是在https://example.com什么应的值start_url是https://example.com/manifest.json?我希望PWA从而开始https://example.com而不是 https://example.com/index.html.PWA可能放在不同的域上,因此start_url需要是相对的,而不是绝对的.
想象一下,我有一个功能,它通过一百万个/十亿字符串并检查其中的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中
我有一个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中真的是一个'新的渲染引擎',我们都相信你).
它在其他一切方面都有预期效果.
在演示中,您可以看到两个问题示例:
你可以在IE8的开发工具中看到(2):
我不知道这是否是我使用它们或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
我正在使用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) 我应该使用哪个:
<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)
我已经看到两者都在使用,并且都在许多当前的浏览器中工作 - 但大多数浏览器更一致地支持它?
一段时间以来,所有主流浏览器都支持ES6模块.
这些与许多服务器端方法的不同之处在于,它们需要指定要导入的确切文件 - 它们不能使用文件发现.
这是有道理的 - 在Node应用程序或像WebPack这样的捆绑器中,它们只需要模块的名称,然后可以花费一些额外的时间来发现保存代码的特定文件.在网络上,可能是白白浪费了很多往返的(是'library'的library/index.js,还是 library/library.js,还是library.js?require()不关心,但在网络上,我们必须).
打字稿有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">
c# ×4
.net ×3
javascript ×2
typescript ×2
.net-2.0 ×1
.net-3.5 ×1
asp.net ×1
assemblies ×1
css ×1
es6-modules ×1
favicon ×1
html ×1
hyperlink ×1
jquery ×1
performance ×1
server-side ×1
sql-server ×1
wcf ×1