我对如何最好地将我的代码重构为更具可读性的东西感到困惑.
考虑一下这段代码:
var foo = getfoo();
if(foo!=null)
{
var bar = getbar(foo);
if(bar!=null)
{
var moo = getmoo(bar);
if(moo!=null)
{
var cow = getcow(moo);
...
}
}
}
return;
Run Code Online (Sandbox Code Playgroud)
如您所见,需要大量嵌套if
块,因为每个嵌套块依赖于先前的值.
现在我想知道如何让我的代码在这方面更清洁一些.
我自己想到的一些选择是:
ArgumentNullException
s,之后我将它们捕获到最后并将return语句放在我的finally子句中(或者在try/catch块之外)goto:
大多数这些选项对我来说似乎有点"脏",所以我想知道是否有一种很好的方法来清理我创建的这个混乱.
最近我一直想知道最好的方法是在多个元素上执行javascript操作.
我看到的方式有两种可能性:
<div class="validation-required"></div>
<div data-validation-required></div>
在我的IDE(使用R#的Visual Studio 2012)中,如果我使用第一种方法,我会收到警告,说我不应该使用未定义的css类.这让我相信这可能不是最好的主意.然而,这是我最经常使用的方法,尽管这可能只是我们可以使用数据属性前几天的遗物.
所以我的问题非常简单,我应该采用哪种方式简单地"标记"元素以进行进一步处理?
谢谢你的回答
PS:我意识到这个问题可能容易产生主观意见,但我希望在现代浏览器中使用什么有共识.
PPS:我已经对这个问题进行了搜索,但大多数问题都与性能有关,这不是我对一次性情况的首要关注.
在单个视图上遇到多个表单的问题.
假设我有以下viewmodel:
public class ChangeBankAccountViewModel
{
public IEnumerable<BankInfo> BankInfos { get; set; }
}
public class BankInfo
{
[Required]
public string BankAccount { get; set; }
public long Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的viewmodel中,我希望所有BankInfos都显示在彼此之下,每个都在单独的表单中.
为实现这一点,我正在使用局部视图_EditBankInfo:
@model BankInfo
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.InvoiceStructureId)
@Html.TextBoxFor(m => m.IBANAccount)
<button type="submit">Update this stuff</button>
}
Run Code Online (Sandbox Code Playgroud)
以及我的实际观点BankInfo:
foreach(var info in Model.BankInfos)
{
Html.RenderPartial("_EditBankInfo", info);
}
Run Code Online (Sandbox Code Playgroud)
最后,这是我的2个动作方法:
[HttpGet]
public ActionResult BankInfo()
{
return View(new ChangeBankAccountViewModel{BankInfos = new [] {new BankInfo...});
}
[HttpPost]
public ActionResult BankInfo(BankInfo …
Run Code Online (Sandbox Code Playgroud) 我正在使用谷歌可视化API来创建堆积区域图表.当用户将鼠标悬停在图表内的某个点上时,我希望它显示该位置点的总加总和,以及这些点的值.
第二点,我可以通过指定选项轻松实现focusTarget: 'category'
.我希望在类似的外观中,在工具提示中有一个额外的行total
.
我尝试通过添加一个额外的列来实现这个目的,该列Total
的值为0,但工具提示等于总和.然而,这会为图例和图表本身添加一个空行,这在视觉上并不吸引人.
这对我来说应该是开箱即用的东西,但我找不到任何解决这个问题的方法.
如果有人知道解决这个问题的好方法,请回答.提前致谢.
我在使用automapper映射我的父类时遇到了一些麻烦.鉴于以下类,我创建了一个映射配置文件.
映射类:
public class SourceClass
{
public int SourceProperty1 { get; set; }
public int SourceProperty2 { get; set; }
public string SourceProperty3 { get; set; }
public string SourceProperty4 { get; set; }
}
public class TargetBaseClass
{
public int TargetProperty1 { get; set; }
public int TargetProperty2 { get; set; }
}
public class TargetClass1: TargetBaseClass
{
public string TargetProperty3 { get; set; }
}
public class TargetClass2: TargetBaseClass
{
public string TargetProperty4 { get; set; }
} …
Run Code Online (Sandbox Code Playgroud) 我有一个名为"UltrasoundTemplate"的课程.这些UltrasoundTemplate对象包含一个int参数,该参数显示何时定义它们(类似于时间戳).我有一个名为"UltrasoundTarget"的类,其中包含一个UltrasoundTemplate的矢量.我使用push_back(ultrasoundTemplate)将UltrasoundTemplates添加到矢量中.
现在我想按时间戳的顺序对矢量进行排序,而不是将它们添加到矢量中的顺序.
我在谷歌找到了很多答案,这些答案都向我展示了相同的解决方案,但显然我仍然做错了什么.以下是我认为找到解决方案所需的代码片段:
ultrasoundTemplate.h
class UltrasoundTemplate
{
public:
UltrasoundTemplate(/*...*/);
int getVolumePos() { return volume_; }
private:
int volume_;
};
Run Code Online (Sandbox Code Playgroud)
ultrasoundTarget.h
//the sort algorithm
struct MyTemplateSort {
bool operator() ( UltrasoundTemplate t1, UltrasoundTemplate t2){
int it1 = t1.getVolumePos();
int it2 = t2.getVolumePos();
if (it1 < it2)
return true;
return false;
}
};
class UltrasoundTarget
{
public:
UltrasoundTarget(/*...*/);
vector<UltrasoundTemplate> getTemplates() { return USTemplateVector_; }
private:
vector<UltrasoundTemplate> USTemplateVector_;
};
Run Code Online (Sandbox Code Playgroud)
FMainWindow.cpp
void FMainWindow::match_slot()
{
int i;
//here I get the name of the target …
Run Code Online (Sandbox Code Playgroud) 我在ASP.Net MVC 4中遇到了一些奇怪的行为.
基于我的viewmodel中的一些信息,我试图设置一些条件属性,如下所示:
<input type="checkbox" data-primary=@(Model.IsPrimary ? "true" : null) checked="@(Model.Selected ? "checked" : null)" disabled="@(Model.Disabled ? "disabled" : null) />
这对于checked
和disabled
属性工作得很好和花花公子,但由于某种原因它总是会渲染data-primary
属性.Model.IsPrimary
会导致正确data-primary="true"
,但!Model.IsPrimary
导致空洞的data-primary
归属.
这引出了我的第一个问题: 是什么导致了这种奇怪的行为?是因为我正在使用数据属性吗?它是数据属性中的破折号吗?
在那之后,我想,"好吧,确定,这很容易修复",并修复我的代码:
<input type="checkbox" @(Model.IsPrimary ? "data-primary=\"true\"" : String.Empty) checked="@(Model.Selected ? "checked" : null)" disabled="@(Model.Disabled ? "disabled" : null) />
这修复了我的data-primary
属性显示,但不知何故,我的disabled
和checked
属性后来显示为空.
我现在的第二个问题是什么导致了这种行为?据我所知,我的代码中没有语法怪异.
如果有人有任何关于为什么剃刀这样做的信息,请回复.
PS:最后,我通过将我的data-primary
属性放在input元素的末尾来"修复"事物,使一切都按预期运行.
只能从knockout.js开始,但在尝试computed
基于2个不同的observableArray
s 创建方法时已经遇到了一些麻烦
使用knockout.js网站上的文档,我创建了以下viewmodel:
var Cart = function() {
var self = this;
self.Products = ko.observableArray([]);
self.Products2 = ko.observableArray([]);
self.Messages = ko.observableArray([]);
self.TotalAmount = ko.computed(function() {
var result = 0;
ko.utils.arrayForEach(
this.Products().concat(this.Products2()),
function(item) {
result+=item.AmountIncludingVAT();
}
);
return result;
});
};
Run Code Online (Sandbox Code Playgroud)
这样做会引发错误"Uncaught TypeError: Object #<error> has no method 'concat'
.
我知道有这个函数叫arrayPushAll
,但它是一个破坏性的功能,会改变原来的observableArray
.(我不认为这是我想要的).
是否有任何干净的方法来实现我想要做的事情?或者我必须进行两次不同的呼叫arrayForEach
,每个阵列一次?
javascript ×3
c# ×2
asp.net-mvc ×1
automapper ×1
c++ ×1
charts ×1
class ×1
html5 ×1
knockout.js ×1
modelstate ×1
razor ×1
sorting ×1
vector ×1