我有一个静态方法,我调用它来检查是否应该添加一个对象,如果它应该添加它,则调用构造函数。如果不是,它应该什么都不做。我认为返回null会实现这一点,但它创建的对象没有填充任何属性。这会在稍后导致运行时错误。
这是我的代码:
public static WorkSheets AddSheet(string dataPath, string exportFile, string finalFile, string tabName)
{
if (File.Exists(dataPath + exportFile))
{
if (!tabName.Contains("Forecast") & !tabName.Contains("Sales"))
if (Functions.FileIsGood(dataPath + exportFile)) File.Copy(dataPath + exportFile, dataPath + finalFile, true);
return new WorkSheets(dataPath, exportFile, finalFile, tabName);
}
return null;
}
和我的构造函数:
public WorkSheets(string dataPath, string exportFile, string finalFile, string tabName)
{
this.ExportFile = dataPath + exportFile;
this.Path = dataPath + finalFile;
this.TabName = tabName;
this.DateError = !Functions.IsTodaysDate(ExportFile);
this.WorksheetDate = File.GetLastWriteTime(ExportFile);
this.SizeError = !Functions.IsCorrectSize(ExportFile);
this.WorksheetSize = new FileInfo(ExportFile).Length;
}
然后我调用这样的方法:
worksheets.Add(WorkSheets.AddSheet(CurrentWorkbook.DataPath, Constants.PipeExport, Constants.PipeFinalFile, "Pipe"));
我遇到的问题是返回null;我能做什么,所以它不会添加空对象。
答案 0 :(得分:1)
您只需要从临时变量中获取 AddSheet 的返回值,并检查它是否为空。
如果为null,则不要将其添加到工作表列表中
WorkSheets sheet = WorkSheets.AddSheet(CurrentWorkbook.DataPath,
Constants.PipeExport,
Constants.PipeFinalFile,
"Pipe"));
if(sheet != null)
worksheets.Add(sheet);
如果您希望每次向列表中添加元素时都避免重复此检查,那么您可以创建一个派生自List<T>
的新类,并编写自己的Add方法来执行null检查并添加到如果要添加的元素不为null,则为基础类。
public class ListWorkSheets : List<WorkSheets>
{
public new void Add(WorkSheets source)
{
if(source != null)
base.Add(source);
}
}
现在您可以声明
ListWorkSheets worksheets = new ListWorkSheets();
并使用您当前的语法而不向列表中添加null
worksheets.Add(WorkSheets.AddSheet(CurrentWorkbook.DataPath,
Constants.PipeExport,
Constants.PipeFinalFile,
"Pipe"));
答案 1 :(得分:0)
在将实例添加到列表之前尝试一些条件逻辑。
IE
export class MyButtons extends React.Component {
constructor(props) {
super(props);
this.state = { selectedIndex: 0 };
this.handleClick = this.handleClick.bind(this);
}
handleClick(newIndex) {
this.setState({
selectedIndex: newIndex
});
}
render() {
return (
<div>
<button onClick={this.handleClick(0)} >Button 0</button>
<button onClick={this.handleClick(1)} >Button 1</button>
<span>{this.state.selectedIndex}</span>
</div>
);
}
}
答案 2 :(得分:0)
如果您的方法具有声明的返回类型,则必须返回该类型或null。
您可以抛出异常。
或者您将返回类型更改为void并为结果声明out参数
或者,您可以保存实例化对象的调用结果并检查是否为空。
var tmp = WorkSheets.AddSheet(foo);
if(tmp != null) {
worksheets.Add(tmp)
}
答案 3 :(得分:0)
我推荐以下其中一项:
如果它是一个罕见的异常情况,无法找到文件,那么异常可能是正确的&#39;从方法论的角度来看。如果尝试使用不正确的路径很常见,那么返回null并像Steve所说的那样检查可能是最好的。这是代码方法问题而不是技术要求。