当我想在我的字符串开关case语句中使用冒号":"时,我得到错误"unterminated string literal",我该如何解决这个问题,为什么会出错?
码:
@switch (stringText)
{
case "aaaa:ggg":
Do something...
break;
case "bbbb:ggg":
Do something else...
break;
}
Run Code Online (Sandbox Code Playgroud)
如果通过这样做修复它,但是没有找到它是一个好的解决方案:
const string extra = ":ggg";
@switch (stringText)
{
case "aaaa" + extra:
Do something...
break;
case "bbbb" + extra:
Do something else...
break;
}
Run Code Online (Sandbox Code Playgroud)
编辑:使用MVC Razor语法
我在尝试加载XSLT样式表时遇到异常.XSLT样式表非常大(近8,000行).不幸的是,我对此没有任何控制权,而且我无法重构样式表以使其变小.
我们最近升级到.Net Framework 4.5.以下命令在升级之前工作得很好(我们使用的是.Net Framework 4.0).在升级之后,我们收到一条XsltException说"样式表太复杂"的transform.Load行.
我希望有一些新设置可以说"让这个命令按照它在4.0中的方式工作",但我找不到任何地方.
有没有人知道为什么这可能会突然成为4.5版本中的一个问题?怎么解决?
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(XmlReader.Create(report), new XsltSettings { EnableScript = true }, new XmlUrlResolver());
Run Code Online (Sandbox Code Playgroud)
report 是一个包含大型XSLT样式表的MemoryStream.
在Stack Overflow上回答了大量的XSLT问题后,我非常熟悉在XSL转换期间对节点进行分组的Muenchian分组技术.
其中使用的表达式通常是这样的:
*[generate-id() =
generate-id(key('kSomeKey', .)[1])]
Run Code Online (Sandbox Code Playgroud)
它几乎总是包含它[1],但这总是让我觉得奇怪.
XSLT 1.0规范定义generate-id()如下:
generate-id函数返回一个字符串,该字符串唯一标识参数node-set中按文档顺序排在第一位的节点.
(重点补充)
它清楚地表明该函数按文档顺序在第一个节点上运行,并且在此上下文中,[1]将按文档顺序选择集合中的第一个节点,因此它似乎[1]是多余的.
这[1]被广泛使用,我犹豫不决,但它似乎无关紧要.任何人都可以为我清除这个吗?
我需要删除日期时间的时间部分,或者可能是以对象形式的以下格式的日期而不是字符串的形式.
06/26/2014 00:00:00:000
我不能使用任何字符串转换方法,因为我需要对象形式的日期.
我尝试首先将日期转换为字符串,从中删除特定时间的日期,但是一旦我将其再次转换为DateTime对象,它就会在12:00:00 AM添加.
我在尝试重试功能时遇到了一些麻烦,希望得到一些帮助.我有一个我想要调用的$资源,直到成功条件发生或超过最大重试次数.
我似乎遇到的问题是,在我的重试功能中,我正在调用另一个承诺,这就是检查条件的地方.我可以通过删除添加的承诺并在几次重试后创建默认成功条件来使代码按预期运行,但我无法弄清楚如何正确地将新的promise调用添加到函数中.
resource 是一个Angular $资源的替身,它返回$ promise
我的代码如下:
resource.$promise.then(function (response) {
return keepTrying(state, 5);
}).then(function (response) {
}).catch(function (err) {
console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
而keepTrying功能:
function keepTrying(state, maxRetries, deferred) {
deferred = deferred || $q.defer();
resource.$promise.then(function (response) {
success = response;
});
if (success) {
return deferred.resolve(success);
} else if (maxRetries > 0) {
setTimeout(function () {
keepTrying(state, maxRetries - 1, deferred);
}, 1000);
} else if (maxRetries === 0) {
deferred.reject('Maximum retries exceeded');
}
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud) 我想创建一个可排序的observableCollection,所以我开始创建一个继承observable的类,用一些方法对它进行排序,然后我希望该类将索引保存到子节点中,所以我创建了一个接口,公开了一个索引属性,其中我可以写入,并且我将我的集合类的T表示为我的接口,然后我希望能够从avery项目访问parentCollection,这里问题已经开始,因为父集合的类型是通用的...我已经尝试了很多解决方案,我认为协方差或不变性是方法,但我不能让它工作......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary1
{
public class SortableCollection<T> : System.Collections.ObjectModel.ObservableCollection<T>, ISortableCollection<T> where T : ISortable<T>
{
public void Sort()
{
//We all know how to sort something
throw new NotImplementedException();
}
protected override void InsertItem(int index, T item)
{
item.Index = index;
item.ParentCollection = this;
base.InsertItem(index, item);
}
}
public interface ISortableCollection<T> : IList<T>
{
void Sort();
}
public interface ISortable<T>
{
Int32 Index { get; set; }
ISortableCollection<T> ParentCollection { …Run Code Online (Sandbox Code Playgroud) 考虑以下情况:
function func1() {
return {
hello: "world"
};
}
function func2() {
return
{
hello: "world"
};
}
console.log(func1());
console.log(func2());
Run Code Online (Sandbox Code Playgroud)
第一个函数func1()将返回对象,{ hello: "world" }但第二个函数func2()将返回undefined.这是为什么?我的猜测是返回值需要与return关键字在同一行.我在这里没有意识到什么"规则"?
这是一种交换a和b而不需要第三个变量的方法.我理解XOR在真实表中的含义是"真"还是"假",但它究竟在这做什么呢?当我们处理的数字不是布尔值时,XOR如何工作?
int a = 5; int b = 10;
a = a ^ b;
b = a ^ b;
a = a ^ b;
Run Code Online (Sandbox Code Playgroud) (我发布这个自我回答的问题,因为通常提供的解决这个问题的方法是不必要的冗长,我想直接记录.我找不到现有的SO问题,但是如果有的话,请将此作为副本关闭.)
我正在寻找一种方法来执行XPath选择,只有当它符合某个条件时才选择当前节点.例如,当我想有条件地将XSLT模板应用于当前节点时,这将非常有用:
<xsl:template match="Device">
<div>
<h2><xsl:value-of select="Name" /></h2>
<xsl:apply-templates select="???[Featured = 'true']" mode="featured" />
<p><xsl:value-of select="Description" /></p>
</div>
</xsl:template>
<xsl:template match="Book">
<div>
<h2><xsl:value-of select="Title" /></h2>
<xsl:apply-templates select="???[FeaturedBook = 'true']" mode="featured" />
<h3><xsl:value-of select="Author" /></h3>
<p><xsl:value-of select="Summary" /></p>
</div>
</xsl:template>
<xsl:template match="node()" mode="featured">
<p class='featured-notice'>This is a featured item!
<a href="/AddToCart?productId={Id}">Buy now</a> to get a 15% discount.
</p>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
我尝试过使用.[Featured = 'true'],但是我遇到了语法错误.我怎样才能做到这一点?
我不打算在这里添加输入和输出,因为它们与问题相关并且会使它非常长,但是如果你想看到我的想法,我把它们放在这里:输入,输出.
这是我的输入XML文档:
<test xmlns="http://www.example.com/v1">
<qnameValue xmlns:foo="http://foo.example.com/">foo:bar</qnameValue>
</test>
Run Code Online (Sandbox Code Playgroud)
我想使用XSLT(2.0)将此文档的命名空间更改为v2,即所需的输出是:
<test xmlns="http://www.example.com/v2">
<qnameValue xmlns:foo="http://foo.example.com/">foo:bar</qnameValue>
</test>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用此样式表:
<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:previous='http://www.example.com/v1'>
<xsl:output encoding='UTF-8' indent='yes' method='xml'/>
<!-- Identity transform -->
<xsl:template match='@*|node()'>
<xsl:copy>
<xsl:apply-templates select='@*|node()'/>
</xsl:copy>
</xsl:template>
<!-- Previous namespace -> current. No other changes required. -->
<xsl:template match='previous:*'>
<xsl:element name='{local-name()}' namespace='http://www.example.com/v2'>
<xsl:apply-templates select='@* | node()' />
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
不幸的是输出结果如下:
<test xmlns="http://www.example.com/v2">
<qnameValue>foo:bar</qnameValue>
</test>
Run Code Online (Sandbox Code Playgroud)
即qnameValue上的关键命名空间绑定已经消失.有没有办法强制所有命名空间绑定的副本到输出?