C# 传递空参数
我目前在这个问题上有些困难。我有一个不需要任何参数的方法,现在我需要添加一个参数,但我不想在调用该方法的所有不同位置添加参数。这是我目前的方法:C# 传递空参数,c#,asp.net-mvc,parameter-passing,C#,Asp.net Mvc,Parameter Passing,我目前在这个问题上有些困难。我有一个不需要任何参数的方法,现在我需要添加一个参数,但我不想在调用该方法的所有不同位置添加参数。这是我目前的方法: private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel viewModel = null) { IOrderedQueryable<ItemDescription> items= _itemDescriptionRepo
private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel viewModel = null)
{
IOrderedQueryable<ItemDescription> items= _itemDescriptionRepository.FindAll().OrderBy(
c => c.Sort == null).ThenBy(
c => c.Sort).ThenBy(c => c.Description);
if(items.Count()==0)
ModelState.AddModelError("", string.Format("No active {0} entered.", Kids.Resources.Entities.ItemDescription.EntityNamePlural));
return
_itemDescriptionRepository.FindAll().OrderBy(c => c.Description).Where(a=>a.IsActive == true || viewModel == null || a.ItemDescriptionId == viewModel.ItemDescriptionId).Select(
c => new SearchItems {Text = c.Description, Value = c.ItemDescriptionId.ToString()});
}
private IEnumerable GetItems(ItemDescriptionFormViewModel viewModel=null)
{
IOrderedQueryable items=\u itemDescriptionRepository.FindAll().OrderBy(
c=>c.Sort==null)(
c=>c.Sort),然后是(c=>c.Description);
如果(items.Count()==0)
ModelState.AddModelError(“”,string.Format(“未输入活动的{0})”,Kids.Resources.Entities.ItemDescription.EntityNamePlumal));
返回
_itemDescriptionRepository.FindAll().OrderBy(c=>c.Description)。其中(a=>a.IsActive==true | | | | viewModel==null | | a.ItemDescriptionId==viewModel.ItemDescriptionId)。选择(
c=>newsearchItems{Text=c.Description,Value=c.ItemDescriptionId.ToString()});
}
我尝试将null作为参数传递给调用此方法的其他位置,但出现了一个错误。如何使这个问题过载
目的:添加viewModel的目的是因为我有一个包含活动项的下拉列表可供选择。一旦用户选择了一个活动项,然后由于某种原因该项变为非活动项,用户就会去编辑他们的选择。在下拉列表中,应该有活动项目的列表,以及当前处于非活动状态的先前选定项目。我正在使用ViewModel检查以前所选项目的id
谢谢像这样声明:
private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel viewModel = null)
这将允许您使用GetItems()
和GetItems(ItemDescriptionFormViewModel viewModel)
编辑:忽略?由于ItemDescriptionFormViewModel是一个类,因此在此处取消对空引用的引用:
_itemDescriptionRepository.FindAll()
.OrderBy(c => c.Description)
.Where(a=>a.IsActive == true ||
a.ItemDescriptionId == viewModel.ItemDescriptionId) // if viewModel null, this throws
.Select(c => new SearchItems
{
Text = c.Description, Value = c.ItemDescriptionId.ToString()
});
因此,如果视图模型为空,您可以更新Where()
子句以添加pass:
...
.Where(a => a.IsActive || viewModel == null || viewModel.ItemDescriptionId == a.ItemDescriptionId)
然后可以安全地将null
作为参数传递,甚至可以创建一个默认参数值,因此如果没有传递任何参数,它将假定null
当然,这是假设
itemscriptionformviewmodel
是一个类,如果它是一个结构,那么您必须使其为空itemscriptionformviewmodel?
如果您想保留这两个方法(我是说GetItems()和GetItems(viewModel)),它们将自动重载
如果需要第二种方法,可以像这样传递参数
private IEnumerable<SearchItems> GetItems(ItemDescriptionFormViewModel? viewModel)
private IEnumerable GetItems(ItemDescriptionFormViewModel?viewModel)
现在,您可以将null作为其参数传递。您可以将默认值指定给
viewModel
:
private IEnumerable<SearchItems> GetItems(
ItemDescriptionFormViewModel viewModel = null)
{
if (viewModel == null)
viewModel = new ItemDescriptionFormViewModel();
private IEnumerable GetItems(
ItemDescriptionFormViewModel(viewModel=null)
{
if(viewModel==null)
viewModel=新的ItemDescriptionFormViewModel();
这样,如果您只需调用
GetItems()
,它将viewModel
视为newitemsdescriptionformviewmodel()
所有人……感谢所有帮助和努力试图解决这个问题。我终于能够解决这个问题,下面是我解决问题的人:@Amina:null是viewModel参数的有效值吗?@Dennis我有这样的参数:ItemDescriptionFormViewModel viewModel=null。ItemDescriptionFormViewModel是类吗还是结构?@JamesMichaelHare ItemDescriptionFormViewModel是一个类…我目前正在测试建议的更改。只有ItemDescriptionFormViewModel
是一个值类型,即一个结构。此外,您还需要记得检查viewModel.HasValue
,如果返回true,您可以使用viewModel.value访问它的值de>。这对我不起作用,因为ItemDescriptionFormViewModel是一个类。当我尝试此操作时,我得到了以下错误:“viewModel”的默认参数值必须是编译时常量,所以我认为您必须使用默认值ItemDescriptionFormViewModel viewModel=null
,并在比较值时测试null情况。我在其他人也建议使用ch,但现在我得到的对象引用未设置为对象错误的实例。:D错误消息已消失,但我没有得到我想要的结果。使用ViewModel的整个想法是检查以前所选项目的id,并在编辑页面上填充所选项目,但cur通常,它不会显示所选项目,因为我在选择该项目后使其处于非活动状态。其目的是一旦用户选择了一个项目,然后该项目变为非活动状态,当用户编辑该项目时,它会在下拉列表中显示活动项目以及他以前选择的非活动项目。我认为您没有获得正确答案的原因是:结果是,由于您创建了一个新的ItemDescriptionFormViewModel()
,ItemDescriptionID默认设置为0。在检查ID之前,需要先检查ItemDescriptionID==0
,以执行该方法,就好像没有参数一样。尝试此操作时,我得到一个对象引用未设置为对象错误的实例。它引用的是我的.cshtml视图页面。您在哪个对象上获取该错误?是否在方法的其他位置使用viewModel?确切的行是:self.items=@Html.Raw(Json.Encode(Mode.items));在我目前使用的方法中,我唯一一次使用viewModel只是检查我当前代码中某个项目的Id。如果你只使用它来查找Id,你可以只传递一个int而不是整个viewModel。此外,你是否进行了null检查?这对于不带参数调用它很重要。当我调整代码时,我得到对象引用未设置为“我的.cshtml视图”页上对象错误的实例。@阿米娜:在哪一行?这是您使用viewModel的唯一位置。您能用最新代码更新您的问题吗
private IEnumerable<SearchItems> GetItems(
ItemDescriptionFormViewModel viewModel = null)
{
if (viewModel == null)
viewModel = new ItemDescriptionFormViewModel();