如果lambda表达式失败,则抛出异常

时间:2017-01-17 09:12:36

标签: c# exception lambda

为了简化,假设我有一个方法应该从用户列表中找到的ID返回User对象。如果没有找到用户,我想抛出异常。

我目前的代码有效:

    public User GetUserFromID(int id)
    {
        foreach (User u in Users)
            if (u.id == id)
                return u;

        throw new Exception("No user is found");
    }

但是当我想找到一个带有Lambda表达式而不是foreach循环的用户时,我的问题就来了。以下代码成功返回正确的User对象,但如果未找到任何内容,则不会抛出异常。

    public User GetUserFromID(int id)
    {
        return Users.Find(u => u.id == id);

        throw new Exception("No user is found");
    }

希望你能提供帮助: - )

2 个答案:

答案 0 :(得分:1)

你可以使用User.Single(...),如果没有一个匹配就会抛出异常:

 /*global require,console,setTimeout */
    var opcua = require("node-opcua");
    var async = require("async");
    var fs = require("fs");
    var csv = require("fast-csv");
    var sleep = require("system-sleep");

    var client = new opcua.OPCUAClient();
    var endpointUrl = "opc.tcp://" + require("os").hostname() + ":4334/UA/MyLittleServer";


    var the_session, the_subscription;

    async.series([

        // step 1 : connect to
        function(callback)  {
            client.connect(endpointUrl,function (err) {
                if(err) {
                    console.log(" cannot connect to endpoint :" , endpointUrl );
                } else {
                    console.log("connected !");
            console.log("Endpoint URL ", endpointUrl);
                }
                callback(err);
            });
        },

        // step 2 : createSession
        function(callback) {
            client.createSession( function(err,session) {
                if(!err) {
                    the_session = session;
                }
                callback(err);
            });
        },

        // step 3 : browse
        function(callback) {
           the_session.browse("RootFolder", function(err,browse_result){
               if(!err) {
                   browse_result[0].references.forEach(function(reference) {
                       console.log( reference.browseName.toString());
                   });
               }
               callback(err);
           });
        },

        // step 4 : read a variable with readVariableValue
        //function(callback) {
        //   the_session.readVariableValue("ns=2000;s=TEST", function(err,dataValue) {
        //       if (!err) {
        //           console.log(" free mem % = " , dataValue.toString());
        //       }
        //       callback(err);
        //   }); 
        //},

        // step 4' : read a variable with read
        //function(callback) {
        //   var max_age = 0;
        //   var nodes_to_read = [
        //      { nodeId: "ns=2000;s=TEST", attributeId: opcua.AttributeIds.Value }
        //   ];
        //   the_session.read(nodes_to_read, max_age, function(err,nodes_to_read,dataValues) {
        //       if (!err) {
        //          console.log(" free mem % = " , dataValues[0]);
        //       }
        //      callback(err);
        //   }); 
        //},


    //  function(callback){
    //      the_session.readVariableValue("ns=74;s=Dou", function(err,dataValue) {
    //          if(!err){
    //              console.log("Test Success", dataValue.toString());
    //          }
    //          callback(err);
    //          });
    //      },
    //
    //  function(callback){
    //      the_session.readVariableValue("ns=74;s=Float", function(err,dataValue) {
    //          if(!err){
    //              console.log("Test Success", dataValue.toString());
    //          }
    //          callback(err);
    //          });
    //      },
    //
    //  function(callback){
    //      the_session.readVariableValue("ns=74;s=String", function(err,dataValue) {
    //          if(!err){
    //              console.log("Test Success", dataValue.toString());
    //          }
    //          callback(err);
    //          });
    //      },

    //  function(callback){
    //      the_session.readVariableValue("ns=1;s=CSV", function(err, dataValue) {
    //          if(!err){
    //              console.log(dataValue.toString());
    //              sleep(5000);
    //          }
    //          callback(err);
    //          });
    //      },

    //  function(callback){
    //      the_session.readVariableValue("ns=1;s=CSV", function(err, dataValue) {
    //          if(!err){
    //              fs.createReadStream(dataValue.toString())
    //              console.log(dataValue.toString());
    //              sleep(5000);
    //                  .pipe(csv())
    //                  .on('data', function(data){
    //                  console.log(csv);
    //                  sleep(5000);
    //                  })
    //                  .op('end', function(data){
    //                  console.log("Read Finish")
    //                  });
    //          }
    //          callback(err);
    //      });
    //  },





        // step 5: install a subscription and install a monitored item for 10 seconds
        function(callback) {

           the_subscription=new opcua.ClientSubscription(the_session,{
               requestedPublishingInterval: 1000,
               requestedLifetimeCount: 10,
              requestedMaxKeepAliveCount: 2,
               maxNotificationsPerPublish: 10,
               publishingEnabled: true,
              priority: 10
           });

           the_subscription.on("started",function(){
               console.log("subscription started for 2 seconds - subscriptionId=",the_subscription.subscriptionId);
           }).on("keepalive",function(){
              console.log("keepalive");
           }).on("terminated",function(){
               callback();
           });

           setTimeout(function(){
               the_subscription.terminate();
           },10000000);

           // install monitored item
         var monitoredItem  = the_subscription.monitor({
               nodeId: opcua.resolveNodeId("ns=2000;s=TEST"),
               attributeId: opcua.AttributeIds.Value
           },
           {
               samplingInterval: 100,
               discardOldest: true,
              queueSize: 10
           },
           opcua.read_service.TimestampsToReturn.Both
           );
          console.log("-------------------------------------");

         monitoredItem.on("changed",function(dataValue){
              console.log(" New Data Receive = ",dataValue.value.value);
           });
        },

        // close session
        function(callback) {
            the_session.close(function(err){
                if(err) {
                    console.log("session closed failed ?");
                }
                callback();
            });
        }

    ],
    function(err) {
        if (err) {
            console.log(" failure ",err);
        } else {
            console.log("done!");
        }
        client.disconnect(function(){});
    }) ;

为了完整,如果你想抛出自己的异常,那么你可以做这样的事情。

如果没有匹配或者匹配次数超过1,则public User GetUserFromID(int id) { return Users.Single(u => u.id == id); } 将返回SingleOrDefault,因此您可以检查null以确定是否应抛出异常:< / p>

null

答案 1 :(得分:0)

$('#playfield tr td').click(function() {
    newImageSrc = 'img/newImage.png';
    $(this).children().attr('src', newImageSrc);
})

public User GetUserFromID(int id) { return Users.Single(u => u.id == id); } 会在没有一个匹配时抛出异常。