English 中文(简体)
获取错误: 并非所有代码路径都返回一个值
原标题:Getting Error: Not all code paths return a value
  • 时间:2012-05-24 04:20:04
  •  标签:
  • c#

我新到 mvc C#, 被卡住了 。 请就如何解决这个问题提供建议 。 我在 Add 上收到错误 。 当我在红 松软线上徘徊时, 它会说“ 并非所有代码路径都返回一个值 ”

    public ActionResult Add(ShapeInputModel dto, FormCollection collection)
    {

        var model = new GeoRegions();

        if (TryUpdateModel(model))
        {


            var destinationFolder = Server.MapPath("/App_Data/KML");
            var postedFile = dto.Shape;

            if (postedFile != null)
            {
                var fileName = Path.GetFileName(postedFile.FileName);
                var path = Path.Combine(destinationFolder, fileName);
                postedFile.SaveAs(path);

                //Save to Database
                Db.AddGeoRegions(model);
                return RedirectToAction("Index");

            }

            return View();

        }
    }
最佳回答

Use This :

public ActionResult Add(ShapeInputModel dto, FormCollection collection)
{
    var model = new GeoRegions();

    if (TryUpdateModel(model))
    {
        var destinationFolder = Server.MapPath("/App_Data/KML");
        var postedFile = dto.Shape;

        if (postedFile != null)
        {
            var fileName = Path.GetFileName(postedFile.FileName);
            var path = Path.Combine(destinationFolder, fileName);
            postedFile.SaveAs(path);

            //Save to Database
            Db.AddGeoRegions(model);
            return RedirectToAction("Index");
        }
        return View();

    }
    return null; // you can change the null to anything else also.
}

发生错误的原因是如果 TryUpdateModel( model)( model) = 假 , 您的函数不会返回任何内容。 因此, 添加行 < code> return null 或 < code> return any other thing 将会解决问题!

问题回答

如果“ 如果” 从未输入, 则不存在 < code> return 。

我喜欢总是保持如果-else s 使用[ 回报]的平衡,

if (TryUpdateModel(model))
{
    ...
    if (postedFile != null)
    {
        ...
        return RedirectToAction("Index");
    } else {
        return View();
    }
} else {
    return View(); // or null/whatever is appropriate
}

ReSharper当然经常告诉我, 我有“无用”其他声明;

快乐的编码。

添加添加添加

 return null;

前一行

如果 (TryUptidateModel( model( model)) 返回 false , 您可能想要在 < code> return View (); 外有 < code> (; ) < if ?

错误按锡上所写的做; 有一个代码路径, 函数会完成, 但不会返回一个值。 具有返回类型 的函数必须总是返回一个值或丢弃一个例外 。

在您的情况下,如果 TryUptidateModel( model) 返回 false , 您没有返回值 。

读读错误! 在方法执行的某个时候, 您必须返回一个值, 或者丢弃一个例外 。 (我认为返回无效是在此情况下的顺序 )

当然,您的初始 if (TryUptidateModel( model( model) ) 使您的常规只有在条件为 < code> true 时才返回一个值; 如果不是, 将不归还任何内容, 这违反了方法签名 。

你有过

if (TryUpdateModel(model))
{
    // lots of stuff

    return View();
}

如果 TryUptidateModel 不为真, 将返回什么?

您的方法必须返回一个 ActionResult , 即使 if 语句是假的 。

只需快速查看您的代码即可,我可以看到您在“ 如果” 语句块内有返回命令( 返回视图 () ) 。 现在如果“ 如果” 条件失败, 在范围外没有返回声明。 最简单的方法是

 }

            return View();

        }
return null; // Depends upon your code though. you might want to return something else
}

您正在“ 如果( ) ” 条件中返回值。 如果条件失效, 假设什么? 程序不会返回值 。 所以, 如果条件外返回任何默认值, 它可能处于其他状态 。

public ActionResult Add(ShapeInputModel dto, FormCollection collection)
{

    var model = new GeoRegions();

    if (TryUpdateModel(model))
    {
     ....
     ....
    }
    return default_value;//it may be in else condition also.
}

尝试吧。如果问题解决了,请按回答标记。这样对其他人有用。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签